-
-
[原创]android 手游找数据
-
发表于:
2014-7-17 21:20
6997
-
android 手游找数据
我发现这样的 帖子很少
注意主要是说思路,我发现在最新版里这个办法已经不行了,不好意思大家凑活看吧
特此感谢:
小乙 crazemonkey 大佬
没有你们的帮助 没有今天的这篇文章 逆向破解这东西 没有个人教你你很难入门 因为资料太少了 大牛们一般都很低调也不愿意分享
我来一篇 全当抛砖引玉
首先 我先介绍一下我找数据的思路 我找的这个游戏是一个飞行射击游戏android下的一个cocos2d游戏 我要找的是它的减血函数 这个游戏做了很多保护处理 直接使用八门神器 烧饼修改器 搜索数据根本什么都搜不到那么我们怎么找数据呢?,那就只能从程序文件上下手,我们知道减血 最终要的就是一个减字 那么在汇编中什么是减呢?
sub r0,r1
诸如这样的指令表示的都是这种操作
而在一个游戏中与这些相关的无非就是 hp,hurt 等等
那么我们首先从静态反编译入手,(先从静态文件中找线索 然后使用动态调试),那么祭出我们的神器Ida,然后把so文件拖进去反编译后 搜索hurt 最终找到这样一段代码:
好的 那么我们仔细看看这段代码翻译成c语言之后代码是这样的:
sub_588B8C(&unk_6F87B0, "plane_planeHp");
然后 我们发现这个函数有两个参数 第一个是地址第二个是个字符串
看这个名字我们知道 应该是和飞机的血值相关
于是我们试着搜一下第一个参数unk_6F87B0 这个参数
搜到了如上几个方法,那么怎么办呢? 一个一个试吧 没什么好的办法
于是 打开Ida 动态调试 附加进程到游戏 然后下断
其中前几个函数 都没有作用 我断下之后在不停的调用,减血函数是肯定不会在这种函数里的原因很简单 这样不断调用的函数 一般都是渲染或者绘制函数 游戏逻辑的控制代码和这一部分肯定是分离的 所以我们一个接一个的找 注意如何确定就是那个要找的函数很简单,就是下断点 然后动态调试,,以我们这个游戏为例 就是飞机被敌机打一下之后是否停在断点上,如果停了那么可能就是这个函数,因为现在这个游戏更新了,所以就不贴动态调试的图了,最终找到这个函数:
sub_588748((int)&v53, (int *)&unk_6F87B0);
来到这个函数的所在函数的执行处:
那么翻译之后代码是这样的:
sub_588748((int)&v53, (int *)&unk_6F87B0);
sub_35FCBC(v4, &v53, (int)&v52);
v7 = (void *)(v53 - 12);
然后 我们注意代码中有这样一句:
]
动态调试后发现 r5中存在的值是一个2000-5000之内的值 而#0xC则是一个参数
即R5中存在的即是血值,然后我们看下如何修改,只需要将sub 替换为add即可即:
Add r5 ,r5
第一次写文章,不足之处还请指正
本人初学最近求练手,谁有手游破解,辅助制作,资源提取等需求都可以找我qq: 2572873258
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)