rEcover
(rEcover)
94
(lldb) po [[[NSBundle mainBundle] infoDictionary] objectForKey:@“CFBundleExecutable”];
WeChat
(lldb) po [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]
/var/mobile/Containers/Data/Application/A1A0D295-F616-451D-BDC9-303CF410505B/Documents
(lldb) po [NSBundle mainBundle] infoDictionary]
{
BuildMachineOSBuild = 19F101;
CFBundleDevelopmentRegion = “zh_CN”;
CFBundleDisplayName = “\U5fae\U4fe1”;
CFBundleDocumentTypes = (
{
CFBundleTypeName = officeopenxml;
LSHandlerRank = Alternate;
LSItemContentTypes = (
“org.openxmlformats.openxml”
);
},
{
CFBundleTypeName = data;
LSHandlerRank = Alternate;
LSItemContentTypes = (
“public.data”
);
},
{
CFBundleTypeName = ppt;
LSHandlerRank = Alternate;
LSItemContentTypes = (
“com.microsoft.powerpoint.ppt”
);
},
把原来app的执行环境,都替换为微信需要的了。
c7260274
(c7260274)
96
它指令长度是2字节,跟arm64指令部分子集一一对应,比如0001 → “mov x14, x0”, 0002 → “mov x14, x1”,用这部分子集实现整个user space的arm64指令语义。编译就是把"mov x14, x0" 转换为0001的过程。
c7260274
(c7260274)
99
因为不在他子集的那部分指令需要多条子集指令实现,假设 “mov x0, x1"是不支持的,但是子集支持"mov x14, x1”, “mov x0, x14”,实现"mov x0, x1"可以使用前面两条指令连续执行实现,这是比较理想的情况,正好四字节,与原始指令长度一致。3倍其中的一倍是保存对应关系的,所以其实也就膨胀了1倍,就是一条arm64指令平均得需要4条字节码实现。
1 个赞
c7260274
(c7260274)
101
一个字节码是2字节,4个8字节,2倍,对应关系1倍。对应关系是模块偏移对应字节码偏移比如"0,16, 32, 48"表示第一条指令 → 字节码偏移0,第二条指令 → 字节码偏移16, 第三条指令 → 字节码偏移32,以此类推
1 个赞
感觉跟虚拟壳的套路一个样啊,内建解释器,执行一套自定义的指令
yangyss
(yangyss)
108
内建内存,不可执行…(所以,覆盖啥的,基本不现实,权限问题)
<方案一:> 加载模块,模块的内存是可以执行的 (权限到位就行)
<方案二:> 解析执行,是可行的,什么code让 arm直接执行,什么code通过解析后,执行某些固定对应的handle
<方案三:> 全系列解析 arm64 汇编,维护的就是执行时的线程上下文了,工作量大滴很那
目前我只能想到上面三种方案…了
最效率的感觉是,把手势事件,转发到dylib中,直接调用对应的 事件
至于内存变大三倍…我们可以大胆猜想下吗…混淆一下…按某种规律增加垃圾代码…
jmpews
109
5 句话中(排除 1 句废话), 有 4 句是错的(严格说其实全都错了), 真有你的, 好兄弟
1 个赞
111165
(艾斯伯格)
110
谢谢,看了那个vmx文件确实不是我们常规的可执行文件格式的magic
1 个赞
donzell
(每天有艳遇)
112
测试了替换砸壳ipa包加载,有些app如csdn ipa包可以正常加载,有些app如i茅台会闪退,自己写demo app注入动态库消息框提示,用盒子运行不闪退但是提示没有了,另外一个demo 点击按钮弹消息框 自己安装测试都正常放盒子里正常打开但是点击按钮会闪退,兼容性不是很好
1 个赞
大大,请问一下,这个文件怎么生成的,有没有相关资料,我在Google上搜不到相关的资料
研究了好几周,还是没有头绪。尝试了以下几种方式:
1、尝试RevealLoader 找出对应控件名称,尝试找出切入点,但是classdump出的类名与方法名没有Revealloader中对应的类,用Reveal loader查看,“VChat” 是叠加到原本页面上呈现的;
2、尝试在IDA中寻找app入口方法,发现也没有,有点怀疑最开始加载的macho也是个壳;
3、尝试Mock网络请求,试着像上面同学的方式替换下载的ipa文件,发现无论替换成什么ipa(自己写的Demo、OC or Swift)都不行;
4、尝试lldb挂起调试,定位不出切入点,有点迷迷;
5、尝试在Document中找出相关文件,发现他会先下载一个.data文件,然后再解压缩到其沙盒目录下,没有找到类似上面同学所说的vmx文件,手动删除已经解压好的Payload会导致再也起动不了
本人不是黑产也不是灰产,纯属对其动态加载macho的现方式感觉到浓厚的兴趣,想了解一下实现原理。
以下为脱壳后的ipa:
链接: 百度网盘 请输入提取码 提取码: 2333
1 个赞