首页
社区
课程
招聘
[疑问]关于Themida的"API replace"(自己取得名字)。
发表于: 2007-3-14 19:43 5604

[疑问]关于Themida的"API replace"(自己取得名字)。

2007-3-14 19:43
5604
最新的themida加壳的程序。
对于一般VC启动框架代码有
call GetModuleHandleA
加壳都变成
call xxxxxxxx(壳代码)
如果用fly对于1.0的脱法能避过变形成call xxxxxxxx
但是call [IAT]中的IAT地址还是加密了。

上面不是问题。问题来了

我进入这个call xxxxxxxx

最开始是经过变形的GetModuleHandleA的代码。
执行了几条指令后,遇到一个jmp到原始的GetModuleHandleA的尾部的指令。
/*下面是GetModuleHandleA的代码
7C80B6A1 >  8BFF            mov     edi, edi
7C80B6A3    55              push    ebp
7C80B6A4    8BEC            mov     ebp, esp
7C80B6A6    837D 08 00      cmp     dword ptr ss:[ebp+8], 0
7C80B6AA    74 18           je      short 7C80B6C4
7C80B6AC    FF75 08         push    dword ptr ss:[ebp+8]
7C80B6AF    E8 C0290000     call    7C80E074
7C80B6B4    85C0            test    eax, eax
7C80B6B6    74 08           je      short 7C80B6C0
7C80B6B8    FF70 04         push    dword ptr ds:[eax+4]
7C80B6BB    E8 7D2D0000     call    GetModuleHandleW
7C80B6C0    5D              pop     ebp
7C80B6C1    C2 0400         retn    4
7C80B6C4    64:A1 18000000  mov     eax, dword ptr fs:[18]    //跳到了这里
7C80B6CA    8B40 30         mov     eax, dword ptr ds:[eax+30]
7C80B6CD    8B40 08         mov     eax, dword ptr ds:[eax+8]
7C80B6D0  ^ EB EE           jmp     short 7C80B6C0
*/
为什么themida要跳回原始的代码的地方呢?
为什么不全部模拟或者移动到replace的地方执行呢?

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

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
2
Isaiah兄想得很深
我的猜想是Themida遇到访问ret范围之外的指令(这里是je short 7C80B6C4)就认为是对另外一个系统函数的调用,就像是
7C80B6AF    E8 C0290000     call    7C80E074
一样,对这些"被API调用的API"不做处理
请达人指正。
2007-3-14 20:57
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
3
GetModuleHandleA(0) -> 从PEB取映射地址直接返回了(400000).Isaiah想复杂了

另外,如果是shoooo放出keygen前的版本,IAT加密应该是可以避开的
之后的版本哪里有?没见过
2007-3-14 21:11
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个API全部移动到replace的地方执行好象是可以的,但好象不是所有的都行.代码变形时大多都会有这样跳回去的地方,有时候这是没办法的是没有办法的事.归结起来就是有些东西处理起来麻烦,又容易出错,于是只好采用折中的方案了.
2007-3-14 21:23
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
5
嗯,了解了。学习了
应该是1.8.8.0吧。是np给自己+的。应该是正版吧
v961

有了themida确实给patch带来不少麻烦。不过躲来躲去还是避开了。不知道v97x的np会不会更猛
2007-3-14 22:26
0
雪    币: 67
活跃值: (66)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
什么游戏的np版本这么高...
还好我没碰到 最高到v916........
2007-3-15 12:33
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
7
貌似每个游戏的Np的维护小组都不一样。。版本太乱了。
2007-3-15 12:57
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
8
我要是写壳,自己写个系统的dll,多酷
2007-3-15 13:25
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
9
那岂不是要带一堆DLL?
每次系统补丁后dll就有可能不一样了
2007-3-15 13:26
0
雪    币: 67
活跃值: (66)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
10
np非核心库部分肯定不是一个小组在维护 多看几个gamemon你就会发现类似的版本中处理方式确有多处不同
2007-3-15 23:06
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
11
应该是这样的,为了保持兼容性,因为后面的代码可能会涉及到一些初始全局变量的问题
这样说吧 你可以自己再如winsock2的动态连接库 。如果不是由系统载入的 而是自己通过初始化输入输出表 一般情况下是无法进行任何socket调用的

当然只是猜测而已~~哈  我也不研究themida
2007-3-17 13:49
0
游客
登录 | 注册 方可回帖
返回
//