各种常见压缩壳的入口点以及ESP定律脱法.doc_第1页
各种常见压缩壳的入口点以及ESP定律脱法.doc_第2页
各种常见压缩壳的入口点以及ESP定律脱法.doc_第3页
各种常见压缩壳的入口点以及ESP定律脱法.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub - Markus & LaszloASPack 2.12 - Alexey Solodovnikov堀北压缩(KByS)0.28主程序脱壳PECompact 2.x - Jeremy CollakePEncrypt 3.1 Final - junkcodeeuk北斗壳 Nspack3.7一共六款 都是压缩壳 脱之简单 整理一下UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub - Markus & Laszlo006055B0 60 pushad006055B1 BE 00605400 mov esi,STV.00546000 ; 这里使用ESP定律006055B6 8DBE 00B0EBFF lea edi,dword ptr ds:esi+FFEBB000006055BC C787 C4201600 135Fmov dword ptr ds:edi+1620C4,705D006055C6 57 push edi006055C7 83CD FF or ebp,FFFFFFFF006055CA EB 0E jmp short STV.006055DAESP后 直接到关键JMP00605727 E9 28CFF5FF jmp STV.00562654 ;F8一次 直接到达OEP0060572C 44 inc esp0060572D 57 push edi引用:ASPack 2.12 - Alexey Solodovnikov0044B001 60 PUSHAD ; OD载入停在这里0044B002 E8 03000000 CALL acerip.0044B00A ; 观看ESP寄存器 0012FFA4 ESP定律对付ESP后 OD停到这里0044B3B0 /75 08 JNZ SHORT acerip.0044B3BA ; F8一次0044B3B2 |B8 01000000 MOV EAX,10044B3B7 |C2 0C00 RETN 0C0044B3BA 68 BC1F4000 PUSH acerip.00401FBC0044B3BF C3 RETN ; RETN之后 就跳到OEP引用:堀北压缩(KByS)0.28主程序脱壳00401000 /$ 68 71EA4A00 PUSH 堀北压缩.004AEA71 ; OD载入停到这里00401005 |. E8 01000000 CALL 堀北压缩.0040100B ; 这里ESP定律F9 OD停到这里004AEA71 B8 83EA0A00 MOV EAX,0AEA83 ; ESP停到这里004AEA76 BA 00004000 MOV EDX,堀北压缩.00400000004AEA7B 03C2 ADD EAX,EDX004AEA7D FFE0 JMP EAX004AEA7F B1 15 MOV CL,15004AEA81 0000 ADD BYTE PTR DS:EAX,AL004AEA83 60 PUSHAD004AEA84 E8 00000000 CALL 堀北压缩.004AEA89 ; F9一次到这里F9后 循环返回到这里00401005 |. E8 01000000 CALL 堀北压缩.0040100B 下面继续F9运行 (大约)15次时 OD有一次明显的时间间隔 然后停到这里00432A71 B8 E5A70000 MOV EAX,0A7E5 ;停到这里00432A76 BA 00004000 MOV EDX,堀北压缩.0040000000432A7B 03C2 ADD EAX,EDX00432A7D FFE0 JMP EAX ;到这里F7进00432A7F B1 15 MOV CL,1500432A81 0000 ADD BYTE PTR DS:EAX,AL00432A83 60 PUSHAD00432A84 E8 00000000 CALL 堀北压缩.00432A89进入后 (Ctrl+A 我这的OD需要分析下代码 )这里就是OEP0040A7E5 /. 55 PUSH EBP ;OEP0040A7E6 |. 8BEC MOV EBP,ESP0040A7E8 |. 6A FF PUSH -10040A7EA |. 68 C0F54000 PUSH 堀北压缩.0040F5C00040A7EF |. 68 00BC4000 PUSH 堀北压缩.0040BC00 ; SE 处理程序安装0040A7F4 |. 64:A1 0000000MOV EAX,DWORD PTR FS:0引用:PECompact 2.x - Jeremy Collake005B8B60 B8 94426000 MOV EAX,MeteorNe.00604294 ; OD载入 停到这里005B8B65 50 PUSH EAX005B8B66 64:FF35 0000000PUSH DWORD PTR FS:0005B8B6D 64:8925 0000000MOV DWORD PTR FS:0,ESP ; 这里使用ESP定律006042C3 83C4 04 ADD ESP,4 /ESP定律后挺到这里,向下找找关键跳转006042C6 55 PUSH EBP006042C7 53 PUSH EBX006042C8 51 PUSH ECX006042C9 57 PUSH EDI006042CA 56 PUSH ESI006042CB 52 PUSH EDX中间代码省略00604350 5A POP EDX00604351 5E POP ESI00604352 5F POP EDI00604353 59 POP ECX00604354 5B POP EBX00604355 5D POP EBP00604356 FFE0 JMP EAX /这里的CALL应该是跳向OEP呀 引用:PEncrypt 3.1 Final - junkcodeeukOD载入:004E3600 $ B8 00E05500 MOV EAX,MediaFix.0055E000 /停到这里 F8单步一次004E3605 . FFD0 CALL EAX /F7跟进此Call004E3607 2C DB 2C ; CHAR ,F7跟进CALL:0055E000 /E9 25010000 JMP MediaFix.0055E12A /这里的跳转是实现的 我们F8一次即可0055E005 |57 PUSH EDI0055E006 |65:6E OUTS DX,BYTE PTR ES:EDI ; I/O 命令F8一次后停到这里:0055E12A 58 POP EAX ; MediaFix.004E3607 /停到这里,我们在该代码下方找到第一个retn语句 并下断0055E12B E8 16030000 CALL MediaFix.0055E4460055E130 48 DEC EAX中间无用代码省去0055E2A7 F3:A4 REP MOVS BYTE PTR ES:EDI,BYTE PTR DS:0055E2A9 59 POP ECX0055E2AA 5F POP EDI0055E2AB 5E POP ESI0055E2AC C3 RETN /这就是第一个retn语句,下断,运行停在这里。F8一次 即可通往OEP我这还得Ctrl+A分析下004E3600 $ 55 PUSH EBP ; MediaFix.0055E005 / OEP004E3601 . 8BEC MOV EBP,ESP004E3603 . 83C4 F0 ADD ESP,-10004E3606 . 53 PUSH EBX004E3607 . B8 F0324E00 MOV EAX,MediaFix.004E32F0004E360C . E8 8737F2FF CALL MediaFix.00406D98引用:北斗壳 Nspack3.70057A867 9C PUSHFD ; OD载入后停到这里0057A868 60 PUSHAD ; 我们在这里ESP定律即可0057A869 E8 00000000 CALL 流星Nisy.0057A86E0057AAD9 - E9 5AF5F8FF JMP 流星Nisy.0050A038 ; ESP定律后到这里 F8一次到OEP0057AADE 8BB5 A1F9FFFF MOV ESI,DWORD PTR SS:EBP-65F0057AAE4 0BF6 OR ESI,ESI0057AAE6 0F84 97000000 JE 流星Nisy.0057AB830050A038 55 DB 55 ; CHAR U/这里Ctrl+A分析一下就可以了0050A039 8B DB 8B0050A03A EC DB EC0050A03B 83 DB 830050A03C C4 DB C40050A03D EC DB EC0050A03E 53 DB 53 ; CHAR SCtrl+A分析后的代码:0050A038 . 55 PUSH EBP0050A039 . 8BEC MOV EBP,ESP0050A03B . 83C4 EC ADD ESP,-140050A03E . 53 PUSH EBX0050A03F . 56 PUSH ESI引用:脱壳的各种方法常见脱壳知识:1.PUSHAD (压栈) 代表程序的入口点, 2.POPAD (出栈) 代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近拉!3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP),只要我们找到程序真正的OEP,就可以立刻脱壳。方法一:1.用OD载入,不分析代码!2.单步向下跟踪F8,是向下跳的让它实现3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点-运行到所选)4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,这样很快就能到程序的OEP6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入7.一般有很大的跳转,比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETE的一般很快就会到程序的OEP。方法二:ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)1.开始就点F8,注意观察OD右上角的寄存器中ESP有没出现。2.在命令行下:dd 0012FFA4(指在当前代码中的ESP地址),按回车!3.选种下断的地址,下硬件访问WORD断点。4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP,脱壳方法三:内存跟踪:1:用OD打开软件!2:点击选项-调试选项-异常,把里面的忽略全部上!CTRL+F2重载下程序!3:按ALT+M,DA 打开内存镜象,找到第一个.rsrc.按F2下断点,然后按SHIFT+F9运行到断点,接着再按ALT+M,打开内存镜象,找到.RSRC上面的CODE,按F2下断点!然后按SHIFT+F9,直接到达程序OEP,脱壳!方法四:一步到达OEP(前辈们总结的经验)1.开始按Ctrl+F,输入:popad(只适合少数壳,包括ASPACK壳),然后按下F2,F9运行到此处2.来到大跳转处

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论