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

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

2023-7-10 21:16
8045

今天就献丑拿某外卖排行第一的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掉 直接上代码 因为特征太明显了,不需要太用力的实现一下

图片描述

这样就可以了吗?

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

最后于 2024-3-20 18:55 被至尊小仙侠编辑 ,原因:
收藏
点赞7
打赏
分享
最新回复 (10)
雪    币: 2651
活跃值: (7184)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
至尊小仙侠 2023-7-10 21:17
2
1

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

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