首页
社区
课程
招聘
去花枝零.二《外卖某团》
发表于: 2023-7-10 21:16 9012

去花枝零.二《外卖某团》

2023-7-10 21:16
9012

今天就献丑拿某外卖排行第一的APK样本做一下IDA脚本一键去花指令分析。还有我们追求的是完美去花 而不是去花 完美去花再去动态调试会更清晰的调试出来函数路径 这个大家应该都能理解把!

献上对比图,因为没有对比就没有伤害

图片描述

图片描述


图片描述

图片描述

当然还有替换进去的运行图

图片描述

图片描述

讲完效果就开干呗!

简单分析

  • 异常BL指令
    图片描述

分析一下,使用了异常内部函数 ,干扰反汇编引擎让其无法正确函数尾部,当然也不能什么都指望IDA呗 我们发现0x185B4这个地址指向的函数最终路径是走到 0x185c0
然后是个强制跳转 跳转到一个函数中 我起名叫 callrealfunc 因为他的作用就是把刚才x0中拿到的值 去查表查表 这个神奇的操作像不像vmp,hhhh

图片描述

内部很简单 用lr的地址加上x0左移2位 也就是为了四字节对齐拿数据而已,拿到的偏移地址加上LR的值就是真实的jumpaddr 上面那个表只有4个值而已,我发现最多的表里面存了26个位置。

不多BB写代码 首先找到调用callrealfunc的地址
find_callrealfunc函数找到存在的地址,patch_callrealfunc其中一段就是寻找这个地址的引用,并为我们后期的patch做准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def find_callrealfunc(self):
    encodings = [0xDE, 0x43, 0x20, 0x8B]
    codelist = ida_bytes.get_bytes(self.func_start, 0x1000)
    self.callrealfunc = hex(codelist.find(bytes(encodings)) + self.func_start - 8)
    for i in range(self.func_start, self.func_start + 0x1000, 4):
        for csins in md.disasm(ida_bytes.get_bytes(i, 4, 0), i):
            if csins.mnemonic == 'bl':
                if hex(int(csins.op_str.replace('#', ''), 16)) == self.callrealfunc:
                    self.callrealfunclable = csins.address
                    print("callrealfunclable: "+hex(self.callrealfunclable))
 
                    return
 
def patch_callrealfunc(self):
    ref_addrs = []
    ref_addr = ida_xref.get_first_cref_to(self.callrealfunclable)
    while ref_addr != ida_idaapi.BADADDR:
        # print("0x{:x}".format(ref_addr))  # 打印引用的地址
        ref_addrs.append(ref_addr)
        ref_addr = ida_xref.get_next_cref_to(self.callrealfunclable, ref_addr)

图片描述

由图中我们也能看出一共有4个引用,我们只是用idaapi 实现了一遍

干干干干干

  • 读汇编
    既然他是通过跳转表去实现跳转到真实位置,那我们就手动帮他实现一下把
    经过分析所有的基础花都是基于那个获取0x185D4的函数来的,那就通过他定位花的位置,直接patch其位置就得了。

  • 最终总结

其实就是把函数的完整代码块进行拆分成一个个小的基本块(BB) 然后通过callrealfunc进行定位 让基本块最后的B指令进行跳转到下一个真实块,属于打散流,我们只需要按照他打散的粒度进行修复即可

最后我们要把头部的sub_185B4函数去掉 并且把一些无用的堆栈操作也要nop掉 直接上代码 因为特征太明显了,不需要太用力的实现一下

图片描述

这样就可以了吗?

是的就这样就可以了,因为他没有检测,我替换到真机里面可以直接运行 并且签名算法请求正常


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2024-3-20 18:55 被至尊小仙侠编辑 ,原因:
收藏
免费 8
支持
分享
最新回复 (10)
雪    币: 3064
活跃值: (7808)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2

我感觉去壳去花都是逆向的第一步 如果连F5都不行的话 逆向就别提多难过了  望诸位共勉

最后于 2023-7-11 10:58 被至尊小仙侠编辑 ,原因:
2023-7-10 21:17
1
雪    币: 562
活跃值: (4065)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
大佬带我吃饭
2023-7-11 10:25
0
雪    币: 3064
活跃值: (7808)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
DirtyAngle 大佬带我吃饭
带我吃饭吧 
2023-7-11 10:58
0
雪    币: 3004
活跃值: (30866)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
tql
2023-7-11 13:39
1
雪    币: 1030
活跃值: (344)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
如果最后不贴“星球”,给你80分……现在 0 分
2023-7-12 10:02
2
雪    币: 3064
活跃值: (7808)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
ForrestV 如果最后不贴“星球”,给你80分……现在 0 分
下次不贴了 帮我打下分
2023-7-12 10:06
0
雪    币: 562
活跃值: (4065)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
至尊小仙侠 带我吃饭吧[em_13]
搞搞Instagram
2023-7-12 10:09
0
雪    币: 859
活跃值: (915)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
至尊小仙侠 下次不贴了 帮我打下分[em_13]
还是0分
2023-7-12 11:44
0
雪    币: 3064
活跃值: (7808)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
TrumpWY 还是0分
哈哈哈 好的好的 那我再争取努力一下 创作更好的文章
2023-7-12 12:37
0
雪    币: 78
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
大佬,有完整的教程或资料吗,关于去花去混淆的
2024-3-1 15:38
0
游客
登录 | 注册 方可回帖
返回
//