今天我们聊一聊昨天我们开元的 a 六 spa 一键砸壳插件 adcpp i sm 的原理。 我们都知道在 angel 里面下载的应用程序,他在文件系统里面是加密状态,当我们要对他做分析的话,第一个步骤是去解密,那么现在比较多的 说法叫做砸壳,那么砸壳的核心原理是把文件当中的 加密数据和内存当中的解密数据作为一个合并,那么这样一来我们就可以得到一个闸口后的文件, 那么我们怎么去在内存当中确定解密的数据? manto 的头文件有 有一个字段的头部有一个字段叫做音快拼音符,它里面详细的描述了加密的起始偏移,加密的数据大小, 那么我们通过这一个信息就可以在内存当中去弹出相应的解密数据,然后覆盖到文件当中,形成一个扎口号的文件。那么这一个操作对应到我们这个开源项目,他的实现就是 oc 脚本里面的都当这一个函数, 这个函数他做了下面这一些操作,首先是读取文件数据,然后解析他的 iphone 最低版本要求这个是用于 ldb 的存放目录区的那么一个数据之段,然后就是解析他的加密信 行描述段,那么解析了这个两个数据之后,我们就可以做档部操作了,然后确定到他的偏移和大小,然后去拷贝解密数据到我们的文件那个数据里面, 然后再整合成一个砸壳的数据包,那么这个砸壳的数据包我们这里是定一层叫当阴否,这里面有 篮球的名字,大小八分二,定制八分,还有他的 iphone 最低版本的要求这么几个字段, 那么这个数据包我们是通过 adcpp 的叫霸图派这一个脚本的 app 去做数据传送的,他的第一个参数叫做 拍放,这个拍放就是我们 adcbs 上的这个插件在 aust bug 他这个运行状态里面的这个函数的毁掉名字 后面就是巴菲尔以及巴菲尔大桥,我们就通过他来发送到 a 六十七八这个插件的运行状态里面去做进一步的处理。那么在这里我们是做了如下处理,就是得到这个杂科的数据包之后, 我们嗯构造了两个路径,第一个路径是用于 ios a 六十八个虚拟化调试模式的这么一个路径,叫迪卡奇 l s m 六十是安跑 ls 这么一个路径,他是存放扎克的文件,然后我们在虚拟化调试模式就会通过这个目录下面 去找砸壳头的文件,然后做而且的分析,然后再返回一遍窗口里面才能显示他正确的数据。同时我们还创建了一个软链接,这个软链接是 上述路径带一个 iphone 最低版本后缀的这么一个路径,这个路径是用于 a 六 sd bugldb 模式调试的时候,他去寻找扎克后的文件做二定制解析用的这么一个路径。 好,那么我们这个杂科操作他触发机制是怎么样子的呢?这里我们是利用了 a 六 c bug 他的插件 派送插件这么一个框架,我们只要按照他定好的入口 app 按一分写好 么一个拍上脚本,就可以在用户点击的插件菜单,然后插件向插件框架向这个插件询问他的版本号, 简短的描述信息,我们就可以通过这个接口去返回相应的数据,那么所以我们当点击的主菜单插件上面的那个 adcpb los 档这一个菜单,那么就会触发这个接口去调用 他执行砸壳脚本的这么一个操作。在这里最核心的一个函数调用叫 ren a d c r a d c 是 嗯,我们 a 六十的 bug, 他在拍摄环境去调用外部的 oc 脚本是 实实现了这么一个一个接口,通过他我们就可以发送我们写好的扎克脚本,在这里叫做 adcbb f 点 m m 这么一个欧式脚本发送到我们手机端的 iv 进程里面去做相应的扎克操作, 就是我们刚才讲的都当这么一系列的一系列吊用。那么嗯,我们整个插件的流程 就是安装好我们的插件到 a 六十的插件目录,重启之后,我们附加一个要砸壳的 ls 进程, 附加完了之后点击插件主主插件菜单上面的 a d cpb i vstop, 然后就会 调用软 adc 发送我们的砸壳脚本到手机的进程里面去做模开模块,便利 便利到的 ios app 的模块,我们就对他进行具体的砸壳操作,然后组包成一个砸壳数据发送给我们桌面端 a 六十七 bug 的插件,然后 把它组装成我们需要的一个存储路径,把这个数据写进去,然后就实现了这个整颗的查扎科。 那么砸完壳之后,我们后续的对这个进程做相应的调试操作,他就不会出现反,会变窗口,全都是一些加密数据的状态,那么我们就可以正常的对这个进程做相应的调试操作。就算我们手机端他跑的那个应用是加密状态, 但是因为我们调试器用的是内存数据,然后我们在桌面端用的是解密数据,所以这么一套操作下来之后,我们就算他跑的是加密 ls 的 app, 也不妨碍我们去对他做进一步的调试和分析操作。 好,那么感兴趣的朋友,你比如说搞艾维斯越狱开发的逆向工程师、安全工程师,可以去我们这个开源项目的地址去下载源码去看一看 这个原版里面有一个叫 ios 当铺 att 的这么一个插扣的那个项目。如果你有迈克尔的环境,你可以用它去编辑我们这个 mm 文件,然后去制定你自己的操作逻辑,然后如果你是自己用的话,你就用开发 模式,然后每次就用这个脚本。如果你要分发给其他人,比如分发到 windows 或者妮那个上面去使用这个 扎克插件的话,那么你就需要用 a 六十八个主菜单发有下面有一个叫 compl adcpp, 把它变异成二精致的模式 adc, 然后这样我们就可以在妮纳克斯和 windows 以不依赖于 ivs sdk 的方式去做相应的扎克操作, 这样一来我们就可以得到了一个全人机交互,不需要写代码,不需要写脚本的这么一个插件体系。好,谢谢大家。