吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 6110|回复: 16

[原创逆向图文] TMD壳的逆向(可能是2.1.8)

  [复制链接]
zhaoyuanwj2812 发表于 2017-12-14 22:52 | 显示全部楼层 |阅读模式

1、用PEID查壳,发现是TMD壳,我是新手,不知道是哪个版本(可能是2.1.8),载入OD,停在

  008E1000 >  83EC 04         sub esp,0x4
  008E1003    50              push eax
  008E1004    53              push ebx
  008E1005    E8 01000000     call PDF2Word.008E100B
  
  2、先找OEP
  在代码段下内存写入断点,F9运行,停在
  
  007DB41B    F3:A4           rep movs byte ptr es:[edi],byte ptr ds:[>
  007DB41D    C685 6C25B711 5>mov byte ptr ss:[ebp+0x11B7256C],0x56
  007DB424    B8 396D1FD4     mov eax,0xD41F6D39
  007DB429    50              push eax
  
  F8步过,再次F9,停在
  
  007EF98E    8928            mov dword ptr ds:[eax],ebp               ; winmm.midiStreamOut
  007EF990    5D              pop ebp                                  ; winmm.midiStreamOut
  007EF991    FC              cld
  007EF992    AD              lods dword ptr ds:[esi]
  007EF993    F9              stc
  
  删内存断点,下断bp ZwFreeVirtualMemory,F9运行,注意观察寄存器EDI的值,当按F9前后两次EDI的值一样时,
  删除断点,在代码断内存访问断点,F9运行,来到OEP
  
  0046A43F  /.  55            push ebp
  0046A440  |.  8BEC          mov ebp,esp
  0046A442  |.  6A FF         push -0x1
  0046A444  |.  68 A82C6A00   push PDF2Word.006A2CA8
  0046A449  |.  68 14CD4600   push PDF2Word.0046CD14                   ;  SE 处理程序安装
  
  注意数据窗口,
  0048D000  03010000
  0048D004  03020000
  0048D008  03021038
  0048D00C  03030000
  0048D010  03040000
  0048D014  00000000
  0048D018  5D17D578  comctl32.ImageList_GetImageCount
  0048D01C  5D17B66C  comctl32.ImageList_SetBkColor
  
  发现有的api正常,有的api被壳改成了自己的函数,我们先进03020000里面去看看
  里面有大量的花指令,仔细的跟下,去掉花指令后,有用的几条:
  
  03010000    6A 2C           push 0x2C
  03010012    68 E3D04927     push 0x2749D0E3
  03010032    813424 FB3C9350 xor dword ptr ss:[esp],0x50933CFB
  03010052    E8 ED68D974     call advapi32.77DA6944
  
  中间两条手动计算下,变成
  
  03010000 >  6A 2C           push 0x2C
  03010012    68 18ECDA77     push 77DAEC18
  03010052    E8 ED68D974     call advapi32.77DA6944
  
  去advapi32定位,发现是advapi32.RegSetValueExA函数。
  
  3,找api写入点
  重新载入程序,在.code段下内存写入断点,F9运行,F8单步,F9运行,来到
  
  007EF98E    8928            mov dword ptr ds:[eax],ebp               ; winmm.midiStreamOut
  007EF990    5D              pop ebp                                  ; winmm.midiStreamOut
  007EF991    FC              cld
  007EF992    AD              lods dword ptr ds:[esi]
  
  删内存断点,在数据窗口,0048D000处,下硬件写入断点,F9运行,来到
  
  00743A94  ^\E9 0FCFFFFF     jmp PDF2Word.007409A8
  00743A99    83C1 04         add ecx,0x4
  00743A9C    870C24          xchg dword ptr ss:[esp],ecx
  00743A9F    5C              pop esp                                  ; PDF2Word.007F24E7
  
  查看堆栈,
  
  0012FF2C   007F24E7  ASCII "h!
"
  0012FF30   007EF8CC  返回到 PDF2Word.007EF8CC
  
  我们在007EF8CC,F2下断,F9运行
  
  007EF8CC   /0F88 01000000   js PDF2Word.007EF8D3   //断在此处
  007EF8D2   |FC              cld
  007EF8D3   \E9 09000000     jmp PDF2Word.007EF8E1
  007EF8D8  ^ E1 FB           loopde short PDF2Word.007EF8D5
  007EF8DA    79 14           jns short PDF2Word.007EF8F0
  
  接着一路F7单步跟进,直到来到
  
  007F0136    8985 57E2C411   mov dword ptr ss:[ebp+0x11C4E257],eax    ; advapi32.RegSetValueExA
  007F013C    60              pushad
  007F013D    BB 3CCABA43     mov ebx,0x43BACA3C
  007F0142    61              popad
  007F0143    8B8D BE2FB711   mov ecx,dword ptr ss:[ebp+0x11B72FBE]
  
  看见没,后面注释出现了我们第二步找到的函数,此处就是壳写入api的地址
  接着我们再一次在.code段下内存写入断点,F9运行,断下
  
  00743A92    8F02            pop dword ptr ds:[edx]                   ; 03030000
  00743A94  ^ E9 0FCFFFFF     jmp PDF2Word.007409A8
  00743A99    83C1 04         add ecx,0x4
  
  此时EDX=0048D004,栈顶为03030000,为壳自己构建的函数,而0048D004刚好就是没加壳
  前advapi32.RegSetValueExA这个函数的地址
  
  好了,到这,我们就可以整理下思路,壳先把正确的api地址写入到壳中某处,然后用自己构
  建的新函数替代原iat的函数地址,我们只要先断在007F0136,把EAX的值保存,然后让程序
  运行到00743A94,再把保存的值替换壳自己的函数,iat就修复成功了。
  
  4、修复原程序中的call
  iat修复成功后,用LordPE+ImportREC脱壳修复后,发现程序还是不能运行,把脱壳后的程序
  扔OD中,一步步向下看,发现很多call指令变成了这样
  
  0046A462  |.  8965 E8       mov [local.6],esp
  0046A465      E8 D2696A02   call 02B10E3C               //壳中的数据
  0046A46A      90            nop
  0046A46B  |.  33D2          xor edx,edx
  0046A46D  |.  8AD4          mov dl,ah
  
  4.1把原程序扔OD,在代码段下内存写入断点,F9,F8,F9后,删除内存写入断点,在007F0136处
  下断,F9运行,然后再一镒代码段下内存写入断点,F9
  ------------------------------A处------------------------------
  007EF98E    8928            mov dword ptr ds:[eax],ebp               ; winmm.midiOutPrepareHeader
  007EF990    5D              pop ebp                                  ; winmm.midiOutPrepareHeader
  007EF991    FC              cld
  自建函数写入iat,再次F9
  
  007EFE32    AA              stos byte ptr es:[edi]  此时EDI=00431DB0
  007EFE33    E9 08000000     jmp PDF2Word.007EFE40
  007EFE38    37              aaa
  007EFE39    861F            xchg byte ptr ds:[edi],bl  
  
  这里就是改原程序的call,call地址就在寄存器中的EDI,2次F9后(可能3次),我们定位00431DB0
  
  00431DB0  |.  E8 10706F76   |call winmm.midiOutPrepareHeader
  00431DB5  |.  90            |nop
  00431DB6  |.  3BC3          |cmp eax,ebx                             ;  PDF2Word.007F010A
  00431DB8  |.^ 0F85 AEFEFFFF |jnz PDF2Word.00431C6C
  
  原函数call,应该是这样 call dword ptr ds:[0x48D688]
  
  通过跟踪,在4.1节F9后到达的A处首地址一共有4种变化,把每种变化都记下来,然后把在原程序中的每
  个call都改过来,就可以脱壳了,这里就不一一写明了,有兴趣的同学可以逐一跟下
  
  传个此程序的脱壳脚本.

评分

参与人数 21威望 +1 HB +40 THX +11 收起 理由
禽大师 + 1
消逝的过去 + 2
sjtkxy + 1 + 1
鼎香楼 + 1 感谢分享
一路走来不容易 + 1
娄胖胖 + 1
yexing + 1
zyyujq + 1
MoeRay + 1
三月十六 + 1
lies + 1
Marriner + 1 + 1 [快捷评语]--积极评分,从我做起。感谢分享!
1023261581 + 1 + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
hqw222 + 1 + 1
nmswd + 1 + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
chehhh + 1 + 1
lanyueliang518 + 1 + 1 论坛的秩序需要大家共同监督与维护,感谢!
aimee400 + 1 [快捷评语] - 2018,狗年发发发,狗年旺旺旺!
DDK4282 + 2 + 1 [快捷评语] - 给个评分懂感恩!
皆笑谈 + 1 [快捷评语] - 评分=感恩!简单却充满爱!感谢您的作品!
Shark恒 + 1 + 20 + 1 [快捷评语] - 评分=感恩!简单却充满爱!感谢您的作品!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
hacwy 发表于 2018-1-6 21:37 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
rkh156 发表于 2018-1-21 01:24 | 显示全部楼层

参考学习思路,谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
DDK4282 发表于 2018-2-17 23:22 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
lanyueliang518 发表于 2018-3-22 14:27 | 显示全部楼层

感谢老师的分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
迷醉浅眸 发表于 2018-4-20 13:44 | 显示全部楼层

你这是盗别人的贴子啊,原帖https://www.52pojie.cn/thread-675279-1-1.html(虽然是某爱的,但是不赞同盗他人的帖子呀)
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
xtwjq 发表于 2018-4-29 08:17 | 显示全部楼层

评分=感恩!简单却充满爱!感谢您的作品!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
良人彡知情深 发表于 2018-8-18 17:00 | 显示全部楼层

第二步下的是什么断点
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
拿着雪糕 发表于 2022-2-18 23:24 | 显示全部楼层

感谢大佬分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
钧天道 发表于 2022-3-25 09:09 | 显示全部楼层


[快捷回复]-感谢楼主热心分享!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表