我的第一个的正式的tweak

       为什么说第一个,因为之前做的tweak比较小,比如在别人的tweak上作了个小修改,在打包deb;或是网上找了源码,做了个anti-antidebug的小插件。本次我将逆向别人的一个app,并将dylib直接嵌入这个app。本人菜鸟,真的很菜,这里只是做个记录,给自己看,或是给新入坑菜鸟参考。

       本来想分析这个app的验证算法,自己hook它的NSURLConnection类的这个方法:

+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse * _Nullable *)response error:(NSError * _Nullable *)error

然后在这个方法里写入自己的服务器验证代码,无奈,这个app在调用这个方法的前后用了加密和解密,实在很难分析。当然也可以nop掉这些加密解密代码,但这样对原app改动太多,容易出错。因此,现在想简单化处理:nop掉app里对有无注册的验证后的跳转,让这个程序直接不需要注册。然后,我在合适的地方插入自己的服务器注册验证。下面开始:

一、找到相关类和方法

1、用reveal 看关键几个viewcontrol 类。(有个叫Flipboard/ FLEX (Flipboard Explorer),更强大,能在手机上直接看,不需要连接电脑,以后有空试试这个。)

2、用logify.pl 生成这几个viewcontrol 类的tweak.xm。刚生成后,编译会有问题,需要修改。比如

提示:

(1)error: expected selector for Objective-C method            - (void).cxx_destruct;

这是因为class_dump 头文件后,头文件里会有这个方法。只要在tweak.xm中把这个方法删掉即可。

(2) error: unknown type name 'CDStruct_c3b9c2ee'

经查找发现是一个方法的参数类型,因此我从class_dump 头文件中找到这个类型的定义,是个结构体,我把这个结构体定义放到tweak.xm中,结果报错更多,不知道啥原因,我只能先把CDStruct_c3b9c2ee 改成 id,先通过编译再说。

 二、开干,做tweak

1、原来想用iosopendev,毕竟XCODE界面比命令行窗口友好多了,但出了问题,见《关于iosopendev生成项目后编译报错:HBLogDebug 的问题》;monkeydev之前用了下,没用起来。最后还是只能直接用theos了。

2、需要导入第三方库BmobSDK.framework。有两种方法安装:第一种是直接在XCODE中引入,但我没用XCODE;第二中是用CocoaPods安装BmobSDK,我升级brew,rvm,ruby,结果在iosre.com中发现,theos只需直接在makefile中配置即可,根据官方说明:

“在你的XCode工程中Project ->TARGETS -> Build Phases->Link Binary With Libraries引入CoreLocation.framework、Security.framework、CoreGraphics.framework、MobileCoreServices.framework、CFNetwork.framework、CoreTelephony.framework、SystemConfiguration.framework、libz.1.2.5.tbd、libicucore.tbd、libsqlite3.tbd、libc++.tbd、photos.framework”

因此在makefile中配置:

tweak_FRAMEWORKS = UIKit CoreFoundation Foundation CoreGraphics MobileCoreServices CoreTelephony
tweak_FRAMEWORKS += CFNetwork CoreLocation Security SystemConfiguration
tweak_LDFLAGS += -lz.1.2.5  -licucore -lsqlite3 -lc++
tweak_LDFLAGS += BmobSDK.framework/BmobSDK

 特别说明:libz.1.2.5.tbd、libicucore.tbd、libsqlite3.tbd、libc++.tbd 在makefile中写成了-lz.1.2.5  -licucore -lsqlite3 -lc++,是因为格式为 -l<library_name>,并且,库名的前缀“lib”以及后缀省略不写。

 

posted @ 2018-10-27 11:18  iamonion  阅读(909)  评论(0编辑  收藏  举报