首页
社区
课程
招聘
[原创]手脱tElock+Magic JMP寻找
发表于: 2009-2-23 16:54 6909

[原创]手脱tElock+Magic JMP寻找

2009-2-23 16:54
6909

【文章标题】: 手脱tElock+Magic JMP寻找
【文章作者】: qianyicy
【软件名称】: 吾爱破解练习
【下载地址】:
【使用工具】: OD+Import
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  用OD载入.停在
  0046A09D >^\E9 5EDFFFFF     jmp UnPackMe.00468000
  0046A0A2    0000            add byte ptr ds:[eax],al
  0046A0A4    0093 A958AEE5   add byte ptr ds:[ebx+E5AE58A9],dl
  
  这个壳找OEP很容易的.在这里我用二次内存法找.
  
   内存映射,项目 22
   地址=00452000
   大小=00002000 (8192.)
   物主=UnPackMe 00400000
   区段=DATA
   包含=data
   类型=Imag 01001002
   访问=R
   初始访问=RWE
  在data段下F2断点,Shift+F9运行,停在:
  
  004690C6    AC              lods byte ptr ds:[esi]
  004690C7    34 45           xor al,45
  004690C9    8D1B            lea ebx,dword ptr ds:[ebx]
  004690CB    02C1            add al,cl
  ---------------------------------------------------
  内存映射,项目 21
   地址=00401000
   大小=00051000 (331776.)
   物主=UnPackMe 00400000
   区段=CODE
   包含=code
   类型=Imag 01001002
   访问=R
   初始访问=RWE
  
  接着在CODE段下F2断点,Shift+F9运行,来到程序OEP
  
  dump,然后用Import获取输入表.发现N个无效指针.剪掉后修复dump出来的程序,发现无法运行,很显然,IAT被加密了.
  当然.在这里用Import附带的tElock 0.99的插件跟踪,所有指针均可以被修复....
  
  看了好多寻找Magic JMP的文章,今天我也来试着找下传说中的Magic JMP
  
  随便找个无效指针0045512C.记下地址.Ctrl+F2重新载入...
  
  dd 0045512C 下硬件断点,运行....
  
  结果发现出错.提示CRC error,还有CRC检校......
  
  重新载入,清除硬件断点,下bp GetModuleHandleA
  
  Shift+F9运行2次后...alt+F9返回,我们来到...
  
  00469611    85C0            test eax,eax                             ; kernel32.7C800000
  00469613    0F85 D7000000   jnz UnPackMe.004696F0
  00469619    53              push ebx
  0046961A    FF95 721C4000   call dword ptr ss:[ebp+401C72]
  00469620    85C0            test eax,eax
  00469622    0F85 C8000000   jnz UnPackMe.004696F0
  
  通过跟踪可以确定.只要把00469622处的jnz改为Jmp,程序就不会报错...
  
  重新载入...清除一切断点
  
   内存映射,项目 22
   地址=00452000
   大小=00002000 (8192.)
   物主=UnPackMe 00400000
   区段=DATA
   包含=data
   类型=Imag 01001002
   访问=R
   初始访问=RWE
  在data段下内存写入断点....Shift+F9运行,来到
  
  0046914E    AA              stos byte ptr es:[edi]
  0046914F    69D2 A5B0CD4B   imul edx,edx,4BCDB0A5
  00469155    F9              stc
  
  清除内存断点,然后再Ctrl+G定位到00469622,把此处的jnz改jmp,接着dd 0045512C 下硬件访问断点,运行,注意右边
  寄存器窗口....N次Shift+F9后,我们来到...
  
  004698E7    8B85 53384000   mov eax,dword ptr ss:[ebp+403853]
  004698ED    40              inc eax
  004698EE    0F84 A8000000   je UnPackMe.0046999C
  004698F4    80A5 FC2F4000 F>and byte ptr ss:[ebp+402FFC],0FF
  004698FB    0F84 9B000000   je UnPackMe.0046999C
  00469901    80A5 FD2F4000 F>and byte ptr ss:[ebp+402FFD],0FF
  
  此时右边出现...
  
  EAX 7C93135A ntdll.RtlDeleteCriticalSection
  ECX 7C937DE9 ntdll.7C937DE9
  EDX 7C99B178 ntdll.7C99B178
  EBX 00455736 ASCII "DeleteCriticalSection"
  ESP 0012FF80
  EBP 00066A24
  ESI 00455000 UnPackMe.00455000
  EDI 0045512C UnPackMe.0045512C
  EIP 004698E7 UnPackMe.004698E7
  
  看到了没?ntdll.RtlDeleteCriticalSection就是0045512C处的函数..
  
  接着跟踪,通过几次循环.可以初步确定以下几处有用的信息...
  
  00469901    80A5 FD2F4000 F>and byte ptr ss:[ebp+402FFD],0FF
  00469908    0F84 8E000000   je UnPackMe.0046999C                 ;Magic JMP
  0046990E    8B85 57384000   mov eax,dword ptr ss:[ebp+403857]
  00469914    8907            mov dword ptr ds:[edi],eax
  
  00469996    FF85 53384000   inc dword ptr ss:[ebp+403853]
  0046999C    61              popad
  0046999D    3107            xor dword ptr ds:[edi],eax           :这里即是保存函数地址....
  0046999F    58              pop eax
  004699A0    48              dec eax
  
  只要保证00469908处跳,即可避开IAT加密..把je改jmp,Ctrl+G定位到0045159C下硬件执行断点...Shift+F9运行
  
  然后dump,用Import查看,发现所有指针有效.修复后程序可以正常运行...
  
  最后整理下脱壳步骤,
  1,在data段下内存写入断点....Shift+F9运行
  2,定位到00469622,把jnz改jmp
  3,定位到00469908,把je改jmp
  4,定位到OEP,下硬件执行断点...Shift+F9运行,然后脱壳修复即可
  
  
  
  
  
  
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于qianyicy, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年02月23日 16:57:12


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢 学习拉``````````````
2009-2-26 00:43
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不错,学习 了
2010-1-26 23:45
0
雪    币: 92
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
8错,学习是一种动力
2010-1-27 16:43
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
精彩~~~

菜鸟学习中
2010-4-7 10:50
0
游客
登录 | 注册 方可回帖
返回
//