求助关于游戏血战上海滩通过反汇编相关代码对INI配置文件解密的问题
本帖最后由 烟99 于 2024-11-23 23:41 编辑解开游戏的PCK文件后,并没有发现关于杀敌积分配置的文件,于是怀疑在游戏根目录下的那几个加密的INI文件里。
https://attach.52pojie.cn/forum/202411/23/230332x77cd1p1ezdecdc0.png
先讲我的想法:
把游戏主程序EXE拽入IDA里,搜到了很多“.ini”的字符串,然后每一个下方都call了sub_402A50这个函数,再往下就看到有不能打开这个文件的错误提醒,基本可以断定此函数与加载并解密INI文件有关
https://attach.52pojie.cn/forum/202411/23/230343eqf6m4n9j9tm6v67.png
https://attach.52pojie.cn/forum/202411/23/230347jxuhdnduuuunvg1g.png
https://attach.52pojie.cn/forum/202411/23/230352ezb50fhiejeh0dof.png
跳转到sub_402A50
https://attach.52pojie.cn/forum/202411/23/230359fgf0knm96aef90j9.png
按空格进入流程图模式
https://attach.52pojie.cn/forum/202411/23/230406yuxthe56bzt6iwuk.png
; 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
mov ebp, ecx
test edi, edi
jnz short loc_402A81
如上图所示,首先压入四种寄存器,然后从内存中取数据加载到edi寄存器。计算内存地址的方式是栈指针esp加上十六进制的10h(16字节)再加上ArgList所表示的偏移量(4字节),然后从这个计算得到的内存地址取出一个双字(32位,dword ptr表示)的数据放到edi寄存器中、将ecx寄存器的值移动到ebp寄存器中,测试检查,如果test指令的结果不为0则继续,否则报参数无效。
接着,执行下面的操作
mov eax,
lea esi,
push 4
push edi
mov ecx, esi
call dword ptr
test al, al
jnz short loc_402AC7
这里又看到了一个call,应该是INI解密操作,call到eax寄存器的值加上十六进制的14h,然后从这个地址取出一个双字(32位)的值作为函数的入口地址,并跳转到这个地址去执行函数,到了这里我就不会寻址了,求大佬指教。是不是要在ini加载时候call的地方下断点才能知道eax寄存器的值
光看ini不一定准,得监控文件的读写动作 tomcat9 发表于 2024-11-24 00:38
光看ini不一定准,得监控文件的读写动作
现在追踪的基本上就是读取操作
页:
[1]