新手,请教逆向iOS手游(C++功能实现)的思路 / 如何寻找切入点

狗神的书已经看了一遍了,对于OC写的App逆向已经有总体思路了:class-dump头文件、Reveal找UI函数、Cycript找controller等,再结合IDA+LLDB等一步步找。

但是,国内iOS的手游,大多都是cocos2d-x游戏引擎,采用C++写的。class-dump头文件没有(导出的只有部分OC的头文件,大都都是类似腾讯、FB等接入SDK的 没什么用),Reveal看不到游戏界面~~ 只有把砸壳出来的文件拖入IDA看~~

然后说一下我想要实现的功能:游戏登录界面有个同意用户协议的Toggle(一般是自动默认勾选的),不知怎么的,经常出现这样的现象:Toggle显示未勾选,点击勾选按钮没有效果,导致游戏登录不了~~
我想把这个Toggle永远显示默认勾选,让游戏可以正常登录。但是,我找不到切入点,Reveal上看不到那个Toggle的控件,就只有一个window。

请了解这方面的前辈给小弟指一个方向,愁~~ :joy:

从C++的函数名入手,找找有没有类似agreement的函数

我自己不会,但大概思路可以给一点。首先cocos2dx的逻辑应该是lua写的。第一步,找加载lua脚本的入口,游戏一般会对脚本加密,也会对lua虚拟机做一定手脚。先逆向看做了那些手脚,脚本如何加密,然后得到解密算法,解开游戏lua脚本,ui就是lua写的,或配置文件,用lua改写ui或逻辑,加密,放进程序内执行,就能得到你想要的结果。所以你现在需要做的事是下载lua万多行的源码看…

有个思路,既然打勾的话,那个位置肯定是固定的,每次判断提示框出来之后自动在指定坐标模拟一次点击就可以了,游戏的话通常都是一个opengl图层,用reveal是看不到的。如果c++逻辑,函数名被加过混淆的话就更难找了。先试试ida里找字符串,以那个toggle的描述等做关键字查一下有没有,没有就基本没辙了。

我自己当前的问题通过其他方式确实解决了,确实有个配置文件可以让他默认点确认,如@skcwiiur所述。 但是 C++的东西 我确实不知道如何找到寻找某个功能点的逆向切入点,我看了下IDA中的方法名,都是_sub_XX之类的。如果游戏逻辑是lua写的,解密出lua代码 我想可能会很有意思~~我先了解下这方面的。
P.S. 买了本C++逆向的书(看雪论坛上搜到的)希望能学到应对这方面重要功能由C/C++实现情况的。@snakeninny的书《iOS应用逆向工程》确实很赞!

ida 里面看到的基本是 sub_开头的文件,OC的头文件 是正常的

老弟 你现看到切入点没

书名叫什么?对于iOS程序中有C++语言实现部分怎么逆向,分享一下。

可以看一下windows程序逆向的知识,那边C++用的多

我觉得最简单的还是通过苹果提供的IOKit去模拟点击固定的坐标!

coco2d 游戏 分析,一般三四种思路:
第一种:从lua脚本入手(需要你了解c和lua的互相调用)
一般找到 lua_dofile 或者 lua_dostring 类函数,找到 lua源码
然后分析lua源码

第二种,从消息循环入手(需要你了解消息循环的原理)
任何游戏,都有一个消息循环处理函数,定位到其 窗口创建。。然后定位到传递的消息循环函数
分析之,然后定位到,没个消息,对应的处理函数

第三种,数据入手(需要你自己写个内存遍历工具)
这类入手,类似CE。
自定写一个内存搜索工具,对改变的,和未改变的,进行搜索,最后定位到内存。然后通过断点,定位到代码;最后分析其来源。
当然了,此时,你可以直接 inline hook,直接拿到对应的值,然后设置

第四种,从api入手(需要去你写个简单的coco2d的游戏,然后分析下)
这一类,你基本要初步了解 coco2d游戏的开发,知道他点击,选择后,一般调用哪些api。
然后定位到对应的 api,进行分析

总的来说,都大同小异。最后都基本一致。

3 Likes