0%

Reversing_kr Direct3D FPS

运行,发现是一个射击游戏

用IDA载入,老套路,shift+F12 查找可用字符串,

很明显(虽然一开始我没反应过来)Game Clear!应该是正确的分支,查找引用,发现:

这有一个字符数组,对MessageBoxA这个API函数了解的话就会知道这个位置应该是显示文本的位置,此时查看这个byte_a47028的hex窗口

长度应该是52,但是一串乱码,猜测应该是加密了,再对这个数据进行查找引用,发现有一处是对数据进行异或的

byte_A77028这个数组肯定会遍历这一串乱码,那么问题解决了,即这一串乱码和byte_a49184这个数组每个元素进行异或即可,但是异或的这个数组取的值是动态获取的,我想到的是,用od调,
结果有一些字符怎么也没法调出来,

后来单步调了之后发现并不是每次射击都会进入异或的分支,而且i的值并不是从0到51这样递增的,可能先后位数再前面的数
后来看看别人的想法,,,IDApython,一串代码搞定,尴尬

print bytearray( [(Byte( 0xa47028+i ) ^ Byte(0xa49184+(i*0x210))) for i in range(52)] )
随便在哪下一个断点,用IDA动态运行一下就ok了

flag: Thr3EDPr0m