日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

UPX脱壳全程分析(转)

發(fā)布時(shí)間:2025/3/17 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UPX脱壳全程分析(转) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【文章標(biāo)題】: UPX脫殼全程分析

【保護(hù)方式】: 本地驗(yàn)證 【使用工具】: OllyDBG 【作者聲明】: 只是感興趣,沒(méi)有其他目的。失誤之處敬請(qǐng)諸位大俠賜教! --------------------------------------------------------------------------------


???????? 004629D0?? ??? ? > 60 ?? ??? ??? ??? ?pushad ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//保存現(xiàn)場(chǎng)(pushad 相當(dāng)于 push 所有的寄存器)
  004629D1 ?? ??? ?BE 00F04300 ?? ??? ?mov esi, 0043F000 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//把代碼段放到esi寄存器
  004629D6 ?? ??? ?8DBE 0020FCFF ?? ??? ?lea edi, dword ptr [esi+FFFC2000] ?? ??? ??? ??? ??? ??? ?//得到基址
  004629DC ?? ??? ?C787 9CC00400 7>?? ?mov dword ptr [edi+4C09C], 46CD167B ?? ??? ??? ??? ??? ?//將第一個(gè)函數(shù)的地址放到[edi+ 4C09C]
  004629E6 ?? ??? ?57 push edi ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//將基址壓棧
  004629E7 ?? ??? ?83CD FF or ebp, FFFFFFFF ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//將0012FFC0與 FFFFFFFF或
  004629EA ?? ??? ?EB 0E jmp short 004629FA
  004629EC ?? ??? ?90 nop
  004629ED ?? ??? ?90 nop
  004629EE ?? ??? ?90 nop
  004629EF ?? ??? ?90 nop
  004629F0 ?? ??? ?8A06 ?? ??? ??? ??? ?mov al, byte ptr [esi] ?? ??? ??? ??? ??? ??? ??? ??? ??? ?//取出0043F004的一個(gè)字節(jié)
  004629F2 ?? ??? ?46 ?? ??? ??? ??? ??? ?inc esi ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//指向下一個(gè)字節(jié)
  004629F3 ?? ??? ?8807 ?? ??? ??? ??? ?mov byte ptr [edi], al ?? ??? ??? ??? ??? ??? ??? ??? ??? ?//從00401000開(kāi)始,開(kāi)始還原代碼
  004629F5 ?? ??? ?47 ?? ??? ??? ??? ??? ?inc edi ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//指向下一個(gè)地址
  004629F6 ?? ??? ?01DB ?? ??? ??? ??? ?add ebx, ebx ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//ebx + ebx,當(dāng)ebx不等于零的時(shí)候跳轉(zhuǎn),下面的adc如果為,就取出下一個(gè)地址,并放到ebx中
  004629F8 ?? ??? ?75 07 ?? ??? ??? ??? ?jnz short 00462A01
  004629FA ?? ??? ?8B1E ?? ??? ??? ??? ?mov ebx, dword ptr [esi] ?? ??? ??? ??? ??? ??? ??? ??? ?//將0043F000放到ebx中
  004629FC ?? ??? ?83EE FC ?? ??? ??? ?sub esi, -4 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//0043F000加4
  004629FF ?? ??? ?11DB ?? ??? ??? ??? ?adc ebx, ebx ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//進(jìn)位加法器
  00462A01 ?? ??? ?^ 72 ED ?? ??? ??? ?jb short 004629F0 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?// 向上跳轉(zhuǎn),ebx做為是否回跳的標(biāo)志,循環(huán)處理代碼
  00462A03 ?? ??? ?B8 01000000 ?? ??? ?mov eax, 1 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?// eax = 1
  00462A08 ?? ??? ?01DB ?? ??? ??? ??? ?add ebx, ebx ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?// ebx依然作為循環(huán)的標(biāo)志
  00462A0A ?? ??? ?75 07 ?? ??? ??? ??? ?jnz short 00462A13
  00462A0C ?? ??? ?8B1E ?? ??? ??? ??? ?mov ebx, dword ptr [esi] ?? ??? ??? ??? ??? ??? ??? ??? ?//esi指向的地址放到ebx里面
  00462A0E ?? ??? ?83EE FC ?? ??? ??? ?sub esi, -4 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//esi + 4
  00462A11 ?? ??? ?11DB ?? ??? ??? ??? ?adc ebx, ebx ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//進(jìn)位加法
  00462A13 ?? ??? ?11C0 ?? ??? ??? ??? ?adc eax, eax ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//進(jìn)位加法
  00462A15 ?? ??? ?01DB ?? ??? ??? ??? ?add ebx, ebx ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//ebx + ebx
  00462A17 ?? ??? ?73 0B ?? ??? ??? ??? ?jnb short 00462A24
  00462A19 ?? ??? ?75 28 ?? ??? ??? ??? ?jnz short 00462A43 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//跳到下面

  00462A95 ?? ??? ?81FD 00FBFFFF ?? ??? ?cmp ebp, -500 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//迷惑指令
  00462A9B ?? ??? ?83D1 02 ?? ??? ??? ?adc ecx, 2 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//進(jìn)位加法
  00462A9E ?? ??? ?8D142F ?? ??? ??? ??? ?lea edx, dword ptr [edi+ebp] ?? ??? ??? ??? ??? ??? ??? ?//edi + ebp的地址裝載到edx,即原來(lái)的代碼段的地址
  00462AA1 ?? ??? ?83FD FC ?? ??? ??? ?cmp ebp, -4 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//判斷跳轉(zhuǎn)標(biāo)志,EBP小于等于-4就跳
  00462AA4 ?? ??? ?76 0E ?? ??? ??? ??? ?jbe short 00462AB4
  00462AA6 ?? ??? ?8A02 ?? ??? ??? ??? ?mov al, byte ptr [edx] ?? ??? ??? ??? ??? ??? ??? ??? ??? ?//取出代碼段的一字節(jié)
  00462AA8 ?? ??? ?42 ?? ??? ??? ??? ??? ?inc edx ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//指向下一個(gè)地址
  00462AA9 ?? ??? ?8807 ?? ??? ??? ??? ?mov byte ptr [edi], al ?? ??? ??? ??? ??? ??? ??? ??? ??? ?//取出的代碼放到edi里面
  00462AAB ?? ??? ?47 ?? ??? ??? ??? ??? ?inc edi ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//指向下一個(gè)代碼
  00462AAC ?? ??? ?49 ?? ??? ??? ??? ??? ?dec ecx ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//計(jì)數(shù)器
  00462AAD ?? ??? ?^ 75 F7 ?? ??? ??? ?jnz short 00462AA6 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//關(guān)于計(jì)數(shù)器(ecx)的跳轉(zhuǎn)
  00462AAF ?? ??? ?^ E9 42FFFFFF ?? ??? ?jmp 004629F6 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//向上面跳,跳到add ebx,ebx
  00462AB4 ?? ??? ?8B02 ?? ??? ??? ??? ?mov eax, dword ptr [edx] ?? ??? ??? ??? ??? ??? ??? ??? ?//處理輸入表
  00462AB6 ?? ??? ?83C2 04 ?? ??? ??? ?add edx, 4 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//edx + 4,指向下一個(gè)地址
  00462AB9 ?? ??? ?8907 ?? ??? ??? ??? ?mov dword ptr [edi], eax ?? ??? ??? ??? ??? ??? ??? ??? ?//將代碼放到edi
  00462ABB?? ??? ?83C7 04 ?? ??? ??? ?add edi, 4 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?// edi + 4, 存放代碼的地址
 
  00462AC3 ?? ??? ?01CF ?? ??? ??? ??? ?add edi, ecx ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//edi + ecx,指向接收代碼的地址的最后一個(gè)字節(jié)
  00462AC5 ?? ??? ?^ E9 2CFFFFFF ?? ??? ?jmp 004629F6 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//跳到 add ebx,ebx

  00462AD2 ?? ??? ?8A07 ?? ??? ??? ??? ?mov al, byte ptr [edi] ?? ??? ??? ??? ??? ??? ??? ??? ??? ?//指向我們?cè)瓉?lái)代碼段的代碼,取出到AL里面
  00462AD4 ?? ??? ?47 ?? ??? ??? ??? ??? ?inc edi ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//指向下一個(gè)字節(jié)
  00462AD5?? ??? ?2C E8 ?? ??? ??? ??? ?sub al, 0E8 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//處理CALL
  00462AD7 ?? ??? ?3C 01 ?? ??? ??? ??? ?cmp al, 1 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//判斷al是否大于1
  00462AD9 ?? ??? ?^ 77 F7 ?? ??? ??? ?ja short 00462AD2?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//循環(huán),到下一個(gè)CALL的第一個(gè)字節(jié)為止

  00462AE0 ?? ??? ?8B07 ?? ??? ??? ??? ?mov eax, dword ptr [edi] ?? ??? ??? ??? ??? ??? ??? ??? ?//取出里面的地址,里面的地址是定位CALL的絕對(duì)地址要用到的
  00462AE2 ?? ??? ?8A5F 04 ?? ??? ??? ?mov bl, byte ptr [edi+4] ?? ??? ??? ??? ??? ??? ??? ??? ?//得到下條地址的開(kāi)始字節(jié)放到AL里面,CALL絕對(duì)地址就是下條指令開(kāi)始+剛才上面取出的那個(gè)數(shù)字
  00462AE5?? ??? ?66:C1E8 08 ?? ??? ??? ?shr ax, 8 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//ax右移8位
  00462AE9 ?? ??? ?C1C0 10 ?? ??? ??? ?rol eax, 10 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//eax算術(shù)左移 8位
  00462AEC ?? ??? ?86C4?? ??? ??? ??? ?xchg ah, al ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//交換內(nèi)容
  00462AEE ?? ??? ?29F8 ?? ??? ??? ??? ?sub eax, edi ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//eax - edi
  00462AF0 ?? ??? ?80EB E8 ?? ??? ??? ?sub bl, 0E8?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//再減去E8
  00462AF3 ?? ??? ?01F0 ?? ??? ??? ??? ?add eax, esi ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//eax + esi,其中 esi是代碼段開(kāi)始的地方
  00462AF5 ?? ??? ?8907 ?? ??? ??? ??? ?mov dword ptr [edi], eax ?? ??? ??? ??? ??? ??? ??? ??? ?//這里處理CALL的地址,算出CALL的偏移到EDI里面
  00462AF7 ?? ??? ?83C7 05 ?? ??? ??? ?add edi, 5 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//edi + 5,指向call的后面
  00462AFA ?? ??? ?88D8 ?? ??? ??? ??? ?mov al, bl ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//bl的內(nèi)容放到al中
  00462AFC ?? ??? ?^ E2 D9 ?? ??? ??? ?loopd short 00462AD7 ?? ??? ??? ??? ??? ??? ??? ??? ??? ?//循環(huán)處理CALL,其中ecx作為計(jì)數(shù)器
  00462AFE ?? ??? ?8DBE 00F00500 ?? ??? ?lea edi, dword ptr [esi+5F000] ?? ??? ??? ??? ??? ??? ??? ?//代碼段的起始地址 + 5F000
  00462B04 ?? ??? ?8B07 ?? ??? ??? ??? ?mov eax, dword ptr [edi] ?? ??? ??? ??? ??? ??? ??? ??? ?//現(xiàn)在EDI指向我們的代碼的輸入表
  00462B06 ?? ??? ?09C0 ?? ??? ??? ??? ?or eax, eax ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//eax 或 eax ,判斷eax是否為零
 
  00462B0A ?? ??? ?8B5F 04 ?? ??? ??? ?mov ebx, dword ptr [edi+4] ?? ??? ??? ??? ??? ??? ??? ??? ?//取得這個(gè)地址的數(shù)據(jù)放到ebx
  00462B0D ?? ??? ?8D8430 AC2D0600 ?? ?lea eax, dword ptr [eax+esi+62DAC] ?? ??? ??? ??? ??? ??? ?// 取得外殼段的KERNEL32.DLL的地址放eax
  00462B14 ?? ??? ?01F3 ?? ??? ??? ??? ?add ebx, esi ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//我們代碼段的起始地址加上剛才取出的那個(gè)數(shù)據(jù)
  00462B16 ?? ??? ?50 ?? ??? ??? ??? ??? ?push eax ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//kernel32.dll的地址
  00462B17 ?? ??? ?83C7 08 ?? ??? ??? ?add edi, 8 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//edi + 8
  00462B1A ?? ??? ?FF96 4C2E0600 ?? ??? ?call dword ptr [esi+62E4C] ?? ??? ??? ??? ??? ??? ??? ??? ?//裝載kernel32.dll
  00462B20 ?? ??? ?95 ?? ??? ??? ??? ??? ?xchg eax, ebp ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//交換數(shù)據(jù),即eax指向kernel32.dll的地址
  00462B21 ?? ??? ?8A07 ?? ??? ??? ??? ?mov al, byte ptr [edi] ?? ??? ??? ??? ??? ??? ??? ??? ??? ?//取得現(xiàn)在的EDI的地址指向的數(shù)據(jù)放到AL
  00462B23 ?? ??? ?47 ?? ??? ??? ??? ??? ?inc edi ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//指向下一個(gè)函數(shù)
  00462B24 ?? ??? ?08C0 ?? ??? ??? ??? ?or al, al ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//al 或 al,判斷al是否為零
  00462B26 ?? ??? ?^ 74 DC ?? ??? ??? ?je short 00462B04
  00462B28 ?? ??? ?89F9 ?? ??? ??? ??? ?mov ecx, edi ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//取出的函數(shù)的名字放到ecx里面
  00462B2A ?? ??? ?57 ?? ??? ??? ??? ??? ?push edi ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//函數(shù)名字壓棧
  00462B2B ?? ??? ?48 ?? ??? ??? ??? ??? ?dec eax ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//eax - 1
  00462B2C ?? ??? ?F2:AE ?? ??? ??? ??? ?repne scas byte ptr es:[edi]
  00462B2E ?? ??? ?55 ?? ??? ??? ??? ??? ?push ebp ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//kernel32.dll的基址
  00462B2F ?? ??? ?FF96 502E0600 ?? ??? ?call dword ptr [esi+62E50] ?? ??? ??? ??? ??? ??? ??? ??? ?//外殼的GetProcaddress
  00462B35 ?? ??? ?09C0 ?? ??? ??? ??? ?or eax, eax ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//eax或eax,得到函數(shù)的地址
  00462B37 ?? ??? ?74 07 ?? ??? ??? ??? ?je short 00462B40
  00462B39 ?? ??? ?8903?? ? ?? ??? ??? ?mov dword ptr [ebx], eax ?? ??? ??? ??? ??? ??? ??? ??? ?//處理輸入表
  00462B3B ?? ??? ?83C3 04 ?? ??? ??? ?add ebx, 4 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//ebx + 4,指向下一個(gè)輸入表的地址
 
  00462B46 ?? ??? ?8BAE 542E0600 ?? ??? ?mov ebp, dword ptr [esi+62E54] ?? ??? ??? ??? ??? ??? ??? ?//VirtualProtect的地址放到ebp
  00462B4C ?? ??? ?8DBE 00F0FFFF ?? ??? ?lea edi, dword ptr [esi-1000] ?? ??? ??? ??? ??? ??? ??? ?//指向PE頭,即映像基址
  00462B52 ?? ??? ?BB 00100000 ?? ??? ?mov ebx, 1000 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//把1000放到ebx,即ebx = 1000

  00462B5D ?? ??? ?FFD5 ?? ??? ??? ??? ?call ebp ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//改變屬性
  00462B5F ?? ??? ?8D87 1F020000 ?? ??? ?lea eax, dword ptr [edi+21F] ?? ??? ??? ??? ??? ??? ??? ?//現(xiàn)在eax指向PE頭中區(qū)段的偏移起始位置
  00462B65 ?? ??? ?8020 7F ?? ??? ??? ?and byte ptr [eax], 7F ?? ??? ??? ??? ??? ??? ??? ??? ??? ?//改寫區(qū)段名字
  00462B68 ?? ??? ?8060 28 7F ?? ??? ??? ?and byte ptr [eax+28], 7F ?? ??? ??? ??? ??? ??? ??? ??? ?//改寫區(qū)塊屬性第一個(gè)區(qū)塊的屬性

  00462B75 ?? ??? ?61 ?? ??? ??? ??? ??? ?popad ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//恢復(fù)現(xiàn)場(chǎng)
  00462B76 ?? ??? ?8D4424 80 ?? ??? ??? ?lea eax, dword ptr [esp-80]
  00462B7A ?? ??? ?6A 00 ?? ??? ??? ??? ?push 0
  00462B7C ?? ??? ?39C4 ?? ??? ??? ??? ?cmp esp, eax
  00462B7E ?? ??? ?^ 75 FA ?? ??? ??? ?jnz short 00462B7A
  00462B80 ?? ??? ?83EC 80 ?? ??? ??? ?sub esp, -80
  00462B83 ?? ??? ?^ E9 109FFEFF ?? ??? ?jmp 0044CA98 ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//跨區(qū)段的轉(zhuǎn)移,跳到OEP


提供一份附件,看起來(lái)可能更直觀:

http://www.2cto.com/uploadfile/2012/1202/20121202072155254.zip

轉(zhuǎn)載于:https://www.cnblogs.com/Fightingbirds/p/3172890.html

總結(jié)

以上是生活随笔為你收集整理的UPX脱壳全程分析(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。