论坛风格切换
您好,欢迎光临本站!   登录 注册新用户
  • 9199阅读
  • 3回复

【OD分析二叉树遍历案例技巧】找CALL和二叉树数据定位和编程(剑网3为例) [复制链接]

上一主题 下一主题
 

发帖
1997
黑豆
294
威望
7391
贡献值
0
交易币
0
红豆
2
只看楼主 倒序阅读 0 发表于: 2014-07-05
光逆向可不行,还要会编程,本贴强大的二叉树算法遍历出了某youxi的技能属性、人物属性等信息。是新型算法逆向和编程的经典之作。现在的youxi有些不是传统的基址+偏移能搞出来的。而是二叉树算法,导致很多人找不到基址。那么就用二叉树算法遍历试试喽。
   那么一般用二叉树的进程,其中的函数CALL也有一定的规律。不懂得请回帖。懂的可无视。


1、下面是OD找jianwang3函数CALL的技巧——以 剑网3为例
OD打开加载youxi,点菜单栏上“查看”-》“可执行模块”,选择“Jx3Client.exe”,要点两次才能真正的来到youxi领空
然后在OD主窗口里面点鼠标右键,“查找”-》“所有参考文本字串”
在搜索出来的窗口里面点鼠标右键,“查找文本”  
如果你想找CALL,就填“KPlayerClient::Send”,然后在找到的项上双击,就来到了代码段  
类似这样:  
0042C690  /$  51            push ecx
0042C691  |.  A1 E8C25C00   mov eax,dword ptr ds:[0x5CC2E8]
0042C696  |.  53            push ebx
0042C697  |.  8B5C24 0C     mov ebx,dword ptr ss:[esp+0xC]
0042C69B  |.  55            push ebp
0042C69C  |.  56            push esi
0042C69D  |.  57            push edi
0042C69E  |.  8BF9          mov edi,ecx
0042C6A0  |.  8B48 20       mov ecx,dword ptr ds:[eax+0x20]
0042C6A3  |.  33F6          xor esi,esi
0042C6A5  |.  894B 02       mov dword ptr ds:[ebx+0x2],ecx
0042C6A8  |.  39B7 98230000 cmp dword ptr ds:[edi+0x2398],esi
0042C6AE  |.  897424 10     mov dword ptr ss:[esp+0x10],esi
0042C6B2  |.  75 41         jnz XJX3Clien.0042C6F5
0042C6B4  |.  68 74CC5600   push JX3Clien.0056CC74                   ;  ASCII "KPlayerClient::Send"
0042C6B9  |.  68 BE040000   push 0x4BE
0042C6BE  |.  68 38BF5600   push JX3Clien.0056BF38                   ;  ASCII "m_piSocketStream"
0042C6C3  |>  68 6C875600   push JX3Clien.0056876C                   ;  ASCII "KGLOG_PROCESS_ERROR(%s) at line %d in %s  
0042C6C8  |.  6A 07         push 0x7
0042C6CA  |.  FF15 C4805600 call dword ptr ds:[<&Engine_Lua5.KGLogPr>;  Engine_L.KGLogPrintf
这是所有功能CALL的内部的交汇点,然后点鼠标右键“查找”-》“所有命令”-》"CALL 0042c690",就是这个函数的头部
然后在弹出的窗口中点鼠标右键,“在每个命令上设置断点”,然后youxi会不停的断下,按F2取消当前断点, 再按F9运行youxi,这样多按几次,直到youxi不自动断下为止,比如你想找技能CALL,你就在youxi里使用技能,然后youxi会断下,按ALT+K查看调用堆栈,点第一个双击,来到的代码段就是技能call。如果想找其他的CALL都类似。



2、下面是 OD找二叉树数据的技巧——以 剑网3为例




如果你想找数据,比如说技能结构,你就“查找文本”-》“LuaGetSkillLevel”
类似这样:  
0052CF70   .  83EC 08       sub esp,0x8  
0052CF73   .  53            push ebx
0052CF74   .  56            push esi
0052CF75   .  57            push edi  
0052CF76   .  8B7C24 18     mov edi,dword ptr ss:[esp+0x18]  
0052CF7A   .  57            push edi  
0052CF7B   .  8BD9          mov ebx,ecx  
0052CF7D   .  33F6          xor esi,esi  
0052CF7F   .  E8 9EB3EEFF   call <jmp.&Engine_Lua5.lua_gettop>
0052CF84   .  83C4 04       add esp,0x4  
0052CF87   .  83F8 01       cmp eax,0x1
0052CF8A   .  74 21         je XJX3Clien.0052CFAD  
0052CF8C   .  68 6CEE5900   push JX3Clien.0059EE6C                   ;  ASCII "KPlayer:uaGetSkillLevel"
0052CF91   .  68 90160000   push 0x1690  
0052CF96   .  68 708D5600   push JX3Clien.00568D70                   ;  ASCII "nRetCode == 1"
0052CF9B   .  68 6C875600   push JX3Clien.0056876C                   ;  ASCII "KGLOG_PROCESS_ERROR(%s) at line %d in %s  

0052CFA0   .  6A 07         push 0x7
0052CFA2   .  FF15 C4805600 call dword ptr ds:[<&Engine_Lua5.KGLogPr>;  Engine_L.KGLogPrintf  
0052CFA8   .  83C4 14       add esp,0x14  
0052CFAB   .  EB 3B         jmp XJX3Clien.0052CFE8
0052CFAD   >  6A 01         push 0x1
0052CFAF   .  57            push edi
0052CFB0   .  E8 79B3EEFF   call <jmp.&Engine_Lua5.lua_tonumber>
0052CFB5   .  D97C24 20     fstcw word ptr ss:[esp+0x20]
0052CFB9   .  0FB74424 20   movzx eax,word ptr ss:[esp+0x20]
0052CFBE   .  0D 000C0000   or eax,0xC00 $5@[l5cJU;  
0052CFC3   .  894424 14     mov dword ptr ss:[esp+0x14],eax
0052CFC7   .  83C4 08       add esp,0x8  
0052CFCA   .  8D8B 6C500000 lea ecx,dword ptr ds:[ebx+0x506C]  
0052CFD0   .  D96C24 0C     fldcw word ptr ss:[esp+0xC]  
0052CFD4   .  DF7C24 0C     fistp qword ptr ss:[esp+0xC]  
0052CFD8   .  8B4424 0C     mov eax,dword ptr ss:[esp+0xC]  
0052CFDC   .  50            push eax  
0052CFDD   .  D96C24 1C     fldcw word ptr ss:[esp+0x1C]
0052CFE1   .  E8 6AA8FCFF   call JX3Clien.004F7850

地址0052CFE1这个地方的call JX3Clien.004F7850就是通过技能ID来返回技能等级,地址0052CFCA那个地方的ebx+0x506C,这个EBX就是人物基址。
发帖
5
黑豆
5
威望
5
贡献值
0
交易币
0
红豆
0
只看该作者 2 发表于: 2014-09-24
请教楼主,我用上面的方法断不了的call得怎么找呀,查找KPlayerClient::Send之后函数头下断,技能啥的都断,但是像/ Output 这样调用的不断,请楼主教教我,谢谢
发帖
0
黑豆
0
威望
0
贡献值
0
交易币
0
红豆
0
只看该作者 3 发表于: 2017-12-27
l老师,请问下  “LuaGetSkillLevel”  这个是代表什么意思  求解
快速回复
限100 字节
 
上一个 下一个