本帖最后由 烟99 于 2024-11-23 23:41 编辑
解开游戏的PCK文件后,并没有发现关于杀敌积分配置的文件,于是怀疑在游戏根目录下的那几个加密的INI文件里。
先讲我的想法:
把游戏主程序EXE拽入IDA里,搜到了很多“.ini”的字符串,然后每一个下方都call了sub_402A50这个函数,再往下就看到有不能打开这个文件的错误提醒,基本可以断定此函数与加载并解密INI文件有关
跳转到sub_402A50
按空格进入流程图模式
[Asm] 纯文本查看 复制代码 ; int __stdcall sub_402A50(char ArgList)
sub_402A50 proc near
ArgList= byte ptr 4
push ebx
push ebp
push esi
push edi
mov edi, dword ptr [esp+10h+ArgList]
mov ebp, ecx
test edi, edi
jnz short loc_402A81
如上图所示,首先压入四种寄存器,然后从内存中取数据加载到edi寄存器。计算内存地址的方式是栈指针esp加上十六进制的10h(16字节)再加上ArgList所表示的偏移量(4字节),然后从这个计算得到的内存地址取出一个双字(32位,dword ptr表示)的数据放到edi寄存器中、将ecx寄存器的值移动到ebp寄存器中,测试检查,如果test指令的结果不为0则继续,否则报参数无效。
接着,执行下面的操作
[Asm] 纯文本查看 复制代码 mov eax, [ebp+14h]
lea esi, [ebp+14h]
push 4
push edi
mov ecx, esi
call dword ptr [eax+14h]
test al, al
jnz short loc_402AC7
这里又看到了一个call,应该是INI解密操作,call到eax寄存器的值加上十六进制的14h,然后从这个地址取出一个双字(32位)的值作为函数的入口地址,并跳转到这个地址去执行函数,到了这里我就不会寻址了,求大佬指教。是不是要在ini加载时候call的地方下断点才能知道eax寄存器的值
|