吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10331|回复: 23
收起左侧

[原创] tElock v0.92a 脱壳手记

[复制链接]
小鸡拜拜 发表于 2009-11-2 22:44
本帖最后由 小鸡拜拜 于 2009-11-2 22:49 编辑

004E567D >^\E9 7EE9FFFF     jmp Hzbit.004E4000        //OD载入
004E5682    0000            add byte ptr ds:[eax],al  //F7跟进
004E5684    0000            add byte ptr ds:[eax],al
004E5686    0000            add byte ptr ds:[eax],al
004E5688    0000            add byte ptr ds:[eax],al
004E568A    0000            add byte ptr ds:[eax],al
004E568C    C8 560E00       enter 0xE56,0x0




004E4000    FC              cld                     //F7到达这里
004E4001    60              pushad                  
004E4002    E8 02000000     call Hzbit.004E4009     //F8走到这一步执行ESP定律
004E4007    E8 00E80000     call Hzbit.004F280C     //F9运行后会出现文件效验失败的对话框  如图1    图1.jpg
004E400C    0000            add byte ptr ds:[eax],al
004E400E    5E              pop esi




紧跟着F12暂停后,接着按ait+f9返回到用户代码,此时点对话框上的确定按钮





004E4D81    6A 00           push 0x0           //停在了这里 接着向上找一句可以跳过的地址 来跳过错误
004E4D83    FF5424 E0       call dword ptr ss:[esp-0x20]
004E4D87    8B95 66B34000   mov edx,dword ptr ss:[ebp+0x40B366]
004E4D8D    0195 32B34000   add dword ptr ss:[ebp+0x40B332],edx
004E4D93    0195 42B34000   add dword ptr ss:[ebp+0x40B342],edx




004E4D07   /0F85 9C000000   jnz Hzbit.004E4DA9   //向上找后发现这一句可以跳过下面的错误
004E4D0D   |8B95 66B34000   mov edx,dword ptr ss:[ebp+0x40B366]  //现在我们来寻找一种新方法来避开错误
004E4D13   |0195 32B34000   add dword ptr ss:[ebp+0x40B332],edx  //从新载入程序 切记删除我们刚下的硬件断点
004E4D19   |0195 3EB34000   add dword ptr ss:[ebp+0x40B33E],edx
004E4D1F   |6A 30           push 0x30
004E4D21   |53              push ebx




004E567D >^\E9 7EE9FFFF     jmp Hzbit.004E4000    //程序从载后停在这里
004E5682    0000            add byte ptr ds:[eax],al  //ait+m打开内存镜像
004E5684    0000            add byte ptr ds:[eax],al  //接着在数据段 DATA段下内存写入断点
004E5686    0000            add byte ptr ds:[eax],al
004E5688    0000            add byte ptr ds:[eax],al
004E568A    0000            add byte ptr ds:[eax],al




Memory map, 条目 21                      //在这里下内存写入断点
地址=004A4000                           //接着shift+f9运行程序
大小=00003000 (12288.)
属主=Hzbit    00400000
区段=DATA
包含=数据
类型=Imag 01001002
访问=R
初始访问=RWE




004E4894    AA              stos byte ptr es:[edi]    //程序停在了这里
004E4895    69D2 A5B0CD4B   imul edx,edx,0x4BCDB0A5   //取消内存写入断点
004E489B    F9              stc                       //在次打开内存镜像 在CODE段下断
004E489C    72 02           jb short Hzbit.004E48A0   
004E489E    CD20 D1C269DB   vxdjump 0xDB69C2D1
004E48A4    70 1F           jo short Hzbit.004E48C5




Memory map, 条目 20                //在这里F2下断 接着shift+f9运行程序
地址=00401000
大小=000A3000 (667648.)
属主=Hzbit    00400000
区段=CODE
类型=Imag 01001002
访问=R
初始访问=RWE




004A301C    55              push ebp             //这里就是OEP   发现此程序为DELPHI编写
004A301D    8BEC            mov ebp,esp          //loadpe把程序转存
004A301F    83C4 EC         add esp,-0x14        //接着importRCE修复IAT指针
004A3022    53              push ebx             //发现有422个指针是无效的   如图2
图2.JPG
004A3023    33C0            xor eax,eax          //在这里我们可以使用importRCE的等级跟踪3或者插件去进行逐一修复指针 但是我们

今天的目的就是直接寻找他的magic jump 所以选中其中一个无效的指针  如图3 图3.jpg 复制其RVA的地址 并将其地址与该目标程序的基址相加
004A3025    8945 EC         mov dword ptr ss:[ebp-0x14],eax  //找到我们要的地址之后我们继续重新载入程序
004A3028    B8 CC2B4A00     mov eax,Hzbit.004A2BCC
004A302D    E8 8E3BF6FF     call Hzbit.00406BC0
004A3032    33C0            xor eax,eax
004A3034    55              push ebp
004A3035    68 9B314A00     push Hzbit.004A319B




000AC1CC+00400000=004AC1CC




004E567D >^\E9 7EE9FFFF     jmp Hzbit.004E4000         //从载程序之后 我们在命令行输入
004E5682    0000            add byte ptr ds:[eax],al
004E5684    0000            add byte ptr ds:[eax],al
004E5686    0000            add byte ptr ds:[eax],al
004E5688    0000            add byte ptr ds:[eax],al
004E568A    0000            add byte ptr ds:[eax],al
004E568C    C8 560E00       enter 0xE56,0x0



                  数据窗口                  
004AC1CC  3CFACB5B        //这里就是第一个无效指针的地址
004AC1D0  D83F499E        //右键下硬件访问断点 接着shift+f9运行
004AC1D4  5AC4CA71        
004AC1D8  583426A9
004AC1DC  E8C81F8A




004E40A3    90               nop       //当运行2次之后出现了错误提示框
004E40A4    90               nop       //一开始就是下了硬件访问断点之后被检测出来的
004E40A5    33DB             xor ebx,ebx   //继续重载程序  在第一次运行时去查找错误的地址将它跳过
004E40A7    F7F3             div ebx        //找到我们刚找的跳过错误地址004E4D07
004E40A9    64:67:8F06 0000  pop dword ptr fs:[0]
004E40AF    83C4 04          add esp,0x4




004E4D07    68 FE5E3D0F      push 0xF3D5EFE         //此时发现我们的程序并未解码
004E4D0C    38B8 78192CC8    cmp byte ptr ds:[eax-0x37D3E688],bh   //删除所有的断点包括硬件访问
004E4D12    94               xchg eax,esp           //在一次从新载入程序
004E4D13    3F               aas
004E4D14    E3 6C            jecxz short Hzbit.004E4D82




004E567D >^\E9 7EE9FFFF      jmp Hzbit.004E4000       //程序再一次重载之后
004E5682    0000             add byte ptr ds:[eax],al //在次打开内存镜像
004E5684    0000             add byte ptr ds:[eax],al //同样在DATA段下内存写入断点
004E5686    0000             add byte ptr ds:[eax],al
004E5688    0000             add byte ptr ds:[eax],al
004E568A    0000             add byte ptr ds:[eax],al




Memory map, 条目 21                      //在这里下内存写入断点
地址=004A4000                           //接着shift+f9运行程序
大小=00003000 (12288.)
属主=Hzbit    00400000
区段=DATA
包含=数据
类型=Imag 01001002
访问=R
初始访问=RWE




004E4894    AA               stos byte ptr es:[edi]    //程序停在这里  我们将内存断点删除
004E4895    69D2 A5B0CD4B    imul edx,edx,0x4BCDB0A5   //在次查找我们可以跳过错误的地址
004E489B    F9               stc             //Ctrl+g查找004E4D07
004E489C    72 02            jb short Hzbit.004E48A0
004E489E    CD20 D1C269DB    vxdjump 0xDB69C2D1




004E4CF8   /0F85 AB000000    jnz Hzbit.004E4DA9     //在这里F2下断
004E4CFE   |53               push ebx
004E4CFF   |FF95 BCB24000    call dword ptr ss:[ebp+0x40B2BC]
004E4D05   |85C0             test eax,eax
004E4D07   |0F85 9C000000    jnz Hzbit.004E4DA9     //在这里也F2下断
004E4D0D    8B95 66B34000    mov edx,dword ptr ss:[ebp+0x40B366]   //因为这两句都可以跳过下面的错误提示
004E4D13    0195 32B34000    add dword ptr ss:[ebp+0x40B332],edx
004E4D19    0195 3EB34000    add dword ptr ss:[ebp+0x40B33E],edx




004E4DB5    60               pushad               //这里以下就开始逐一取出我们的IAT指针
004E4DB6    33C9             xor ecx,ecx
004E4DB8    2AF6             sub dh,dh
004E4DBA    8A13             mov dl,byte ptr ds:[ebx]
004E4DBC    F6C2 40          test dl,0x40
004E4DBF    74 03            je short Hzbit.004E4DC4
004E4DC1    80E2 5F          and dl,0x5F
004E4DC4    0AD2             or dl,dl
004E4DC6    74 1E            je short Hzbit.004E4DE6
004E4DC8    43               inc ebx
004E4DC9    FEC6             inc dh
004E4DCB    41               inc ecx
004E4DCC    3A5408 FF        cmp dl,byte ptr ds:[eax+ecx-0x1]    //在这里逐一比较需要加密与否
004E4DD0  ^ 74 E8            je short Hzbit.004E4DBA
004E4DD2    3A5408 08        cmp dl,byte ptr ds:[eax+ecx+0x8]
004E4DD6  ^ 74 E2            je short Hzbit.004E4DBA
004E4DD8    3A5408 12        cmp dl,byte ptr ds:[eax+ecx+0x12]
004E4DDC  ^ 74 DC            je short Hzbit.004E4DBA
004E4DDE    3A5408 1D        cmp dl,byte ptr ds:[eax+ecx+0x1D]
004E4DE2  ^ 74 D6            je short Hzbit.004E4DBA
004E4DE4  ^ EB D0            jmp short Hzbit.004E4DB6




004E4DE9    C685 5EAC4000 00 mov byte ptr ss:[ebp+0x40AC5E],0x0   //这里就是相当于比较EBP+0040AC5E是否为0。如果为0则不加密 如

果不为0则加密
004E4DF0    74 07            je short Hzbit.004E4DF9      //们走到这一句时会发现他是不跳的 则是加密指针 同时在寄存器窗口可以

发现他准备开始加密KERNE32模块的指针 所以可以判断得出这里就是magic jump 是必须跳的 我们二进制复制下标志0A F6 61
004E4DF2    808D 5EAC4000 01 or byte ptr ss:[ebp+0x40AC5E],0x1




004E5024    43               inc
004E5025    3803             cmp byte ptr ds:[ebx],al     //到了这里就可以从头在来  开始完整的脱壳
004E5027  ^ 75 F9            jnz short Hzbit.004E5022
004E5029    8385 52B34000 04 add dword ptr ss:[ebp+0x40B352],0x4
004E5030  ^ E9 D4FDFFFF      jmp Hzbit.004E4E09
004E5035    83C6 14          add esi,0x14
004E5038    8B95 66B34000    mov edx,dword ptr ss:[ebp+0x40B366]  
004E503E  ^ E9 92FCFFFF      jmp Hzbit.004E4CD5        //这里开始循环上去执行加密




004E567D >^\E9 7EE9FFFF      jmp Hzbit.004E4000       //程序再一次重载之后
004E5682    0000             add byte ptr ds:[eax],al //在次打开内存镜像
004E5684    0000             add byte ptr ds:[eax],al //同样在DATA段下内存写入断点
004E5686    0000             add byte ptr ds:[eax],al
004E5688    0000             add byte ptr ds:[eax],al
004E568A    0000             add byte ptr ds:[eax],al




Memory map, 条目 21                      //在这里下内存写入断点
地址=004A4000                           //接着shift+f9运行程序
大小=00003000 (12288.)
属主=Hzbit    00400000
区段=DATA
包含=数据
类型=Imag 01001002
访问=R
初始访问=RWE




004E4894    AA               stos byte ptr es:[edi]     //程序停在这里 CTRL+B二进制查找0A F6 61
004E4895    69D2 A5B0CD4B    imul edx,edx,0x4BCDB0A5
004E489B    F9               stc
004E489C    72 02            jb short Hzbit.004E48A0
004E489E    CD20 D1C269DB    vxdjump 0xDB69C2D1
004E48A4    70 1F            jo short Hzbit.004E48C5




004E4DE9    C685 5EAC4000 00 mov byte ptr ss:[ebp+0x40AC5E],0x0
004E4DF0    74 07            je short Hzbit.004E4DF9           //改成JMP
004E4DF2    808D 5EAC4000 01 or byte ptr ss:[ebp+0x40AC5E],0x1  //并且再次打开内存镜像 在CODE断F2下断
004E4DF9    33C0             xor eax,eax




Memory map, 条目 20                //在这里F2下断 接着shift+f9运行程序
地址=00401000
大小=000A3000 (667648.)
属主=Hzbit    00400000
区段=CODE
类型=Imag 01001002
访问=R
初始访问=RWE




004A301C    55               push ebp        //停在OEP 此时我们输入刚被加密IAT的地址看看
004A301D    8BEC             mov ebp,esp     //我们在命令行输入d 004AC1CC 发现指针全部回来啦
004A301F    83C4 EC          add esp,-0x14   //此时用OD自带的DUMP插件把程序DUMP即可 也不用修复了
004A3022    53               push ebx
004A3023    33C0             xor eax,eax
004A3025    8945 EC          mov dword ptr ss:[ebp-0x14],eax
004A3028    B8 CC2B4A00      mov eax,Hzbit.004A2BCC




004AC1CC  7C93188A  ntdll.RtlDeleteCriticalSection
004AC1D0  7C9210ED  ntdll.RtlLeaveCriticalSection
004AC1D4  7C921005  ntdll.RtlEnterCriticalSection
004AC1D8  7C809F11  kernel32.InitializeCriticalSection
004AC1DC  7C809B04  kernel32.VirtualFree
004AC1E0  7C809A71  kernel32.VirtualAlloc














telock.rar (957.1 KB, 下载次数: 91)     //脱壳后的文件 和未脱壳的文件

免费评分

参与人数 1威望 +3 收起 理由
小生我怕怕 + 3 欢迎讨论交流,[吾爱破解]有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

小生我怕怕 发表于 2009-11-2 22:46
鸡大形象玉照

未命名.gif

图文并茂,好鸡好鸡
恭喜鸡大,现在荣升爆破鸡,脱壳鸡
muye 发表于 2009-11-2 22:50
清风原木 发表于 2009-11-3 01:01
热火朝天 发表于 2009-11-3 01:31
学习啦,强啊,最近么多大作
ZeNiX 发表于 2009-11-3 09:24
進來學習一下小鸡拜拜版主對于指針的處理.
8568309 发表于 2009-11-3 10:36
好文,學習手動查找IAT的好辦法
什么也不是 发表于 2009-11-3 10:41

  太强大啦 JJ长的还真的够快的
josong 发表于 2009-11-3 11:05
学习好文好名小鸡拜拜
f8949087456 发表于 2009-11-3 11:19
鸡= =
那是只什么鸡啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 07:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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