美文网首页
谈谈iOS逆向

谈谈iOS逆向

作者: pipa | 来源:发表于2018-02-28 11:36 被阅读402次

从业iOS后,也算兢兢业业,平时关注一些OC,swift动态,看别人造的完美轮子来学习,而自己造的轮子和自己做的饭有相同功效,只有自己能吃的下去。然而这并不是重点,重点是自己一直忽略的ios黑产,其实依然一片繁荣。

最近会帮朋友搞一些ios破壳和逆向、外挂的功能,也算是涨了见识。下面列举一些常见的黑产需求:

  • 修改别人游戏包,自己获利。
  • 破壳,用途太广。可用来研究逻辑,也修改发布等等。
  • 外挂。微信抢红包,钉钉打卡等。
  • 企业签名。 昨天报价 8W,单个ios包签名报价大多在 500以内,看来只是签名,需要一段才能回本。

杂谈:
时间久了,到现在记得的一些逆向过程中印象比较深的事情。

游戏启动的时候要验证授权,没有授权直接kill。
程序启动的时候,有6、7个方法判断是否是越狱手机,是越狱手机kill,加大逆向成本。
修改程序中的所有连接域名,换壳。
还有逆向的较量,别人加的外挂防破解,而你又要去破解他的外挂,逆向之防逆向。

下面写个最近破解别人写的外挂程序。

最近的需求时在别人破解过的包中再次破解。
原始App是一个保险销售使用的销售软件,被人破解,加入随时随地指定坐标打卡。但是加了一个授权码,收费使用。
而我的需求就是在已破解的情况下,再次绕过授权码。
通过抓接口,找到验证接口域名,然后确定是每个动态库 的作用。(以为是已经破解的,所有 framwork目录下已经有了5,6个自定义的dylib)。

如下:其中真实名字已隐藏,毕竟搞别人的app不太地道。

.
├── isMe.dylib
├── JSPatch.js
├── RevealServer.framework
├── custom1.dylib
├── custom2.dylib
├── libsubstrate.dylib
└── custom3.dylib

经确定控制验证的库为 custom3.dylib,然后用hopper找验证函数。

void * -[Auth getUserCode](void * self, void * _cmd) {
    r0 = [NSUserDefaults standardUserDefaults];
    r0 = [r0 retain];
    stack[2043] = [[r0 objectForKey:@"!@#$*@#(!@^#(!@^#(!@^#"] retain];
    [r0 release];
    stack[2041] = [stack[2043] retain];
    objc_storeStrong((sp - 0x1c) + 0x8, 0x0);
    r0 = stack[2041];
    r0 = [r0 autorelease];
    return r0;
}

其中 !@#$*@#(!@^#(!@^#(!@^#为key,我就想着直接在启动时写入正确的激活码就可以了。但是并不是一帆风顺,key其实和设备有绑定关系,这个被我忽略了,走了挺多弯路才知道。所以我还需要修改设备的标示,继续找。

r0 = [UUIDManager getUUID];
    r0 = [r0 retain];
    stack[1994] = r0;
    stack[1992] = [[r0 substringToIndex:0x20, r1, stack[1964], stack[1965]] retain];
    stack[1989] = [[NSString stringWithFormat:@"uuid=%@&", stack[1992]] retain];

额,然后在想办法在 UUIDManager getUUID 返回已经绑定过的UUID就可以。

这个算是通过了。但是要有一些dylib打包的错误。这个都是小问题了。

如果是做ios开发的话,对逆向有了解的话,对开发和安全都会有提高,比如上面的key就可以不用写成明文。

已经建议我家萌小七(也是媛)看逆向了,不过貌似没什么兴趣。(无奈脸)。还是手把手教吧。

相关文章

网友评论

      本文标题:谈谈iOS逆向

      本文链接:https://www.haomeiwen.com/subject/zidbxftx.html