通达信用户完全加密公式破解器之脱壳篇(1-2)

藏家462 关注

收藏于 : 2021-12-09 21:52   被转藏 : 3   

软件来源:网络
软件类型:dll
软件下载:https://www.52pojie.cn/thread-740169-1-1.html
理由:刚好手里有这个软件,这两天泡52pojie论坛又见到上面的文章,所以干脆贴出来跟大家娱乐娱乐。
难度系数:由易到较难
鸣谢:特别是感谢本坛@cndml提供了一个脚本,该脚本将出现在篇(),根据我的调试更改了脚本的一点小瑕疵。
工具:OD;ExeinfoPE_V0044prev3;Import REConstructor v1.7e
 
先查壳,ThemIDA & WinLicense 2.0 - 2.1,准备脱了她。OD拖入TE_Formula.dll,F9跑起,跑起来后有两种结果1、程序初始化;2、程序直接执行
 
停在这里,没有跑飞,那就是第一种情况。接下来,就在程序空间找找api,看图
 
恭喜,良心软件,看到这样的图,可以确定api没有加密。你就把iat找出来。在上图中随便选一个api,我就选第一个 
地址=1000111D 反汇编=call 7C80A055 目标文件=kernel32.LoadResource双击返回调试窗口,看图
 
重新加加载,F9,断在
 
取消硬件断点,alt+M
 
F9,看信息窗口
 
Ecx我选中的apids:[1007E274]存放位置,iat所在地址1007E274,取消所有断点,重新加在程序,F9在数据窗口查看地址1007E274
 
看到好多apiiat位置找到,本程序iat:起始:1007E000;结束:1007E428;大小:428
接下来找OEP,方法:
alt+m10001000段下内存写入断点,然后shift+f9,停在
102AD848    F3:A4           rep movs byte ptr es:[edi],byte ptr ds:[esi]
这行代码上,取消内存写入断点后,命令行输入bp GetProcessHeap+c,然后f9
程序停在7C80AC6D    C3              retn
取消这行代码上的断点,再然后alt+m10001000段下f2断点,然后f9
程序停在1006BA06    837C24 08 01    cmp dword ptr ss:[esp+0x8],0x1
OEP地址:1006BA06然后dump
 
 
接下来
 
 
跑一下脱壳出来的文件TE_Formula_dump_.dll
 
运行,没有出现异常
 
脱完之后是个什么东西,我也不知道
TE_Formula.dll就脱完了,脱她就如同嚼蜡。这文章写出来就像口水文章,了无新意。
接篇 ( ) custom.bin 来源不描述。
 
先查壳, Them IDA  & WinLicense 2.0 - 2.1 ,脱了她。 方法见篇 ( )
IATstart add:100E8000
IATend add:100E8524
Size:524 找到 OEP add:100C509D
来看一下模块间的调用 :
 
N call xxxxxxxx, 毫无疑问 api 已经加密 IAT 表看看
 
先解密 api
找到 magic_jmp
 
magic_jmp add:105E6E41
找到 magic_store
 
magic_store add:10489252
@ cndml 脚本”THEMIDA iat 修复脚本 by cndml.txt ”,( 为了尊重 cndml 的劳动和版权 , 需要脚本的请找 cndml , 再一次感谢 cndml 提供脚本 ), 一通等待
停在 OEP add:100C509D
 
api 解密成功 .
dump 下来 .
ImpREC 修复 .
ReloX 重定位
 
跑一下脱壳出来的文件 custom_dump__.dl
 
运行,出现异常.
重新加载 custom_dump__.dll
od run 跟踪,开记录到文件, ctl+F8 跑起
出现上面异常
看跟踪记录
103C16FC  主        add esi,0x7FFFFFFF                        ; FL=CA, ESI=7FFFFFFE
103C1702  主        xor esi,0x4                               ; FL=P, ESI=7FFFFFFA
103C1708  主        mov esi,0x400                             ; ESI=00000400
103C170D  主        or esi,edx                                ; ESI=0000A55F
103C170F  主        add esi,0x20                              ; FL=0, ESI=0000A57F
103C1715  主        sub esi,0x1C                              ; FL=P, ESI=0000A563
103C171B  主        add esi,edi                               ; FL=A, ESI=10384CD0
103C171D  主        or esi,0x800                              ; FL=0
103C1723  主        sub esi,0x1F                              ; FL=PA, ESI=10384CB1
103C1729  主        or esi,0x400                              ; FL=P
103C172F  主        and esi,0x80000000                        ; FL=PZ, ESI=00000000
103C1735  主        or esi,0x28                               ; FL=P, ESI=00000028
103C173B  主        or esi,edi                                ; FL=0, ESI=1037A76D
103C173D  主        sub esi,0x28                              ; ESI=1037A745
103C1743  主        mov edi,0x1                               ; EDI=00000001
103C1748  主        xor dx,0xA5E8                             ; FL=P, EDX=000000B7
103C174D  主        xor edi,ecx                               ; FL=0, EDI=0F6A303E
103C174F  主        add edx,ebp                               ; FL=P, EDX=1037A787
103C1751  主        mov edx,dword ptr ds:[edx]                ; EDX=00CD76EC      // F2 断点
103C1753  主        add edi,0x80000000                        ; FL=S, EDI=8F6A303E
103C1759  主        push dword ptr ds:[edx]                   ; ECX=0013F31C, ESP=0013F2F8
7C92E480  主        mov ebx,dword ptr ss:[esp]                ; EBX=0013F300
7C92E483  主        push ecx                                  ; ESP=0013F2F4
7C92E484  主        push ebx                                  ; ESP=0013F2F0
7C92E485  主        jmp 0016003C
0016003C  主        pushad                                    ; ESP=0013F2D0
0016003D  主        pushfd                                    ; ESP=0013F2CC
0016003E  主        add ecx,0x4                               ; FL=A, ECX=0013F320
00160041  主        mov esi,ecx                               ; ESI=0013F320
00160043  主        mov edx,ecx                               ; EDX=0013F320
00160045  主        mov edi,0x160000                          ; EDI=00160000
0016004A  主        mov ecx,0x18                              ; ECX=00000018
0016004F  主        cld
00160050  主        rep movs byte ptr es:[edi],byte ptr ds:[esi]; ECX=00000000, ESI=0013F338, EDI=00160018
00160052  主        mov esi,0x160018                          ; ESI=00160018
00160057  主        mov edi,edx                               ; EDI=0013F320
00160059  主        mov ecx,0x18                              ; ECX=00000018
0016005E  主        rep movs byte ptr es:[edi],byte ptr ds:[esi]; ECX=00000000, ESI=00160030, EDI=0013F338
00160060  主        popfd                                     ; FL=S, ESP=0013F2D0
00160061  主        popad                                     ; ECX=0013F31C, EDX=00CD76EC, ESP=0013F2F0, ESI=1037A745, EDI=8F6A303E
00160062  主        call 7C94A824                             ; FL=PZ, EAX=00000000, ECX=7D79F598, EDX=00000000, EBX=00000000, ESP=0013FEA0, EBP=0013FF9C, ESI=7C92DE6E, EDI=00001001     LOADDLL  已终止 : Can't Load LoadDll.dll KiFastSystemCallR>retn     RUN  跟踪已关闭
到上面 附近的应用程序里下 F2 断点,不要到系统指令里下,根据经验,我下到 103C1751 位置 , 重新加载 F9, 断在 103C1751 F7 下来到 103C1759 ,看信息窗
 
信息窗
 
ds:[00CD76EC]=??? 产生异常的地方,新开 OD 加载原始程序 custom.bin 103C1759 下硬件断点, F9, 断在 103C1759 ,,看信息窗
 
信息窗
 
ds:[00CA76EC]=500875FF ds:[00CA76EC] 数据窗口
 
什么东西??根据经验,应该是一些系统代码,复制一行看看是哪个系统程序的代码 回到 custom_dump__.dll ALT+M
 
User32 文件的代码,原来程序在找 User32 的东西,没有,怎么办,给她,找个空的地方补上 103C1759
 
10610528 处:
 
保存OD 加载, F9
,    
运行,搞定,收工。
 
脱完之后是个什么东西,我也不知道
custom.bin 就脱完了,篇 ( ) 也到收尾了。这样才让我们真正见识到了软件作者的功力,过瘾,
软件那处验证他不走 createfile 的通用方式,他要走看是否破坏他的 malloc ,很出彩。
最终还是希望大家用正版,所以很多朋友每次贴子给我留言,希望我放出 破解 版,我原则上不提供。主要是软件作者要开发一个程序真的不容易。
 阅读文章全部内容  
点击查看
文章点评
相关文章
藏家462 关注

文章收藏:1

TA的最新收藏