借你一双慧眼, Frida Native Trace

简介: 借你一双慧眼, Frida Native Trace

一、目标


李老板: 奋飞呀,最近没怎么更新呀?


奋飞: 最近的KPI定的合不合理你心里没点AC数?我现在内卷到周三就开始写周报了,不然被新来的就给卷失业了。


遥想在古典PC互联网时代,咱也是 OD、IDA 玩的很溜的。


一日饮酒乐甚,突发奇想,IDA识别出所有函数,然后导出来给OD,给这些函数下断点,触发之后先打日志,再自动取消断点。这样程序运行的流程不就出来了?


实际跑起来发现,有些函数会频繁被调用,这样导致程序容易假死或者崩溃,所以还需要有个方便的过滤措施,过滤掉频繁调用的函数。74.png


搞出了PEStalker之后,程序的运行流程就无所遁形了。


不过时代变了,移动互联网时代的AppStalker怎么搞?


二、步骤

frida-trace


大胡子其实和我们想到一块去了,他搞了个frida-trace,可以一次性监控一堆函数地址。

然后还能打印出比较漂亮的树状图,不仅可以显示调用流程,还能显示调用层次。并且贴心的把不同线程调用结果用不同的颜色区分开了。


现在就缺个数据源,把IDA的识别结果导出来了。


trace_natives


github.com/Pr0214/trac…  是的,大佬已经写好了,我们又可以白嫖了。


75.png


跑起来


  • 下载traceNatives.py 放到ida的 plugins路径下, 我是mac放在了 /Applications/IDA Pro 7.0/idabin/plugins 目录
  • Pr0214可能用的是IDA 7.x+ 和 python 3.x 的环境, 在我的 IDA7.0和python2下需要微调下代码


# search_result = [f"-a '{so_name}!{offset}'" for offset in search_result]
search_result = ["-a '{}!{}'".format(so_name,offset) for offset in search_result]
# with open(save_path, "w", encoding="utf-8")as F:
with open(save_path, "w")as F:
# print(f"frida-trace -UF -O {save_path}")
print("frida-trace -UF -O {} !".format(save_path))
  • IDA打开之前91fans.com.cn/post/ldqsig… 里的 libxxbitmapkit.so, Edit -> Plugins -> traceNatives 。 然后在分析目录下面会生成 libxxbitmapkit_16250177xx.txt 这就是frida-trace要导入的数据了


  • 先把某电商程序的App跑起来,然后命令
frida-trace -UF -O /Users/fenfei/Desktop/xx/armeabi-v7a_9_4_6/libjdbitmapkit_1625017920.txt


跑起来即可,请注意 这里不要出现中文路径, 可能我的 frida-trace 是在python2.7下跑的,出现中文路径就会载入失败。


最后 随便点个商品详情页76.png


结果还是很漂亮的。


增强一下


李老板: Android的so Trace没问题,ios的App咋不行?


奋飞: RTFS


Android so的代码段name是 .text, ios的代码段name是 __text ,所以我们在 getSegAddr 里加个判断

...
if (idc.get_segm_name(seg)).lower() == '.text' or (
        idc.get_segm_name(seg)).lower() == 'text' or (
        idc.get_segm_name(seg)).lower() == '__text' :
...


李老板: 吾有一函数,第一个入参必定是2,但是不知道是哪个?可以Trace出来吗?

奋飞: ……&*%¥%……)(%$


我们可以修改 handlers/libxxbitmapkit.so/xxx.js下面的脚本来完成一些特别的操作,比如在Trace的时候把第一个参数是2的函数挑出来。

onEnter(log, args, state) {
    log('sub_10d71()');
  },
// 改成
  onEnter(log, args, state) {
  if(args[0] == 2){
    log(" ======== I am here! ========");
  }
    log('sub_10d71()');
  },


当然成千上万个函数,手工去改,李老板会笑话我很二的。

def alter(file,old_str,new_str):
    """
    替换文件中的字符串
    :param file:文件名
    :param old_str:就字符串
    :param new_str:新字符串
    :return:
    """
    file_data = ""
    with open(file, "r", encoding="utf-8") as f:
        for line in f:
            if old_str in line:
                line = line.replace(old_str,new_str)
            file_data += line
    with open(file,"w",encoding="utf-8") as f:
        f.write(file_data)
def findAllFile(base):
    for root, ds, fs in os.walk(base):
        for f in fs:
            yield f
def main():
    strPath = '/Users/fenfei/Desktop/work/blogCode/trace/__handlers__/libxxbitmapkit.so'
    for i in findAllFile(strPath):
        print(i)
        alter(strPath +"/" + i, "onEnter(log, args, state) {", 'onEnter(log, args, state) { if(args[0] == 2){ log(" ======== I am here! ========");}')


人生苦短,快用Python。 收工。


三、总结


和PEStalker的遇到的问题是一样的,hook的函数太多,App很容易崩溃,必须有个方便的过滤措施,把一些频繁调用的,不重要的函数过滤掉。 这个还没想好怎么搞。


大胡子还有个玩具叫 github.com/oleavr/art-… 据说比较牛叉,可以研究下。

不说了,写周报去了。

77.png


我生平开车最恨两种人,一种是随意加塞的,另一种是不让我加塞的。[吃瓜]


TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。


关注微信公众号: 奋飞安全,最新技术干货实时推送


相关文章
|
监控 JavaScript 前端开发
|
存储 缓存 算法
【自己动手画CPU】存储系统设计
博文“【自己动手画CPU】存储系统设计”探讨了在自制 CPU 中存储系统的设计。存储系统是计算机中至关重要的组成部分,负责存储和检索数据。文章介绍了在 DIY CPU 中实现存储系统的关键考虑因素,包括存储器的类型、存储器与 CPU 的连接方式以及数据存取的速度和效率。通过深入探讨存储系统的设计原理和实现方式,读者可以更好地理解计算机内部结构,并且为自己动手设计和构建 CPU 提供了有益的指导和启发。
395 0
【自己动手画CPU】存储系统设计
|
人工智能 自然语言处理 安全
文生视频大模型
Sora 是由 OpenAI 发布的一款文本生成视频的人工智能模型,能够在理解文本的基础上生成高质量的视频内容。Sora 具备 3D 一致性、远程相干性和物体持久性等特性,但目前仍处于测试阶段,仅限特定专家使用,以确保其安全性。
Java 类是如何被加载的
这篇文章从双亲委派讲到了Class文件的加载,最后又绕回到双亲委派,看似有点绕,其实只有理解了Class的加载机制,才能更好的理解类似双亲委派这样的机制,否则只死记硬背一些空洞的理论,是无法起到由内而外的理解的。
11903 91
|
监控 Linux
在Linux中,如何查看网络性能?
在Linux中,如何查看网络性能?
|
数据采集 安全 数据可视化
浅谈网络安全态势感知
网络安全态势感知是应对复杂网络环境和频繁攻击的关键,它基于数据采集、理解和预测,评估网络安全性并预测未来趋势。中国在该领域的研究已有显著进展,如2003年国家互联网应急中心的监测平台和2015年四川大学的大数据分析平台。态势感知涉及数据采集、理解、评估和预测四个步骤,通过可视化方式展示给用户。其核心功能包括态势总览、资产管理、告警管理等。未来发展方向将结合大数据和AI提升预测精度,实现云化和动态扩展。德迅云安全提供的解决方案侧重主动监测、精准防护和智能分析,适用于金融、电商和政企等领域。
|
算法 Java 数据安全/隐私保护
App逆向百例|06|某App mfsig分析
App逆向百例|06|某App mfsig分析
1567 0
|
JavaScript
JS hook 3种方法
JS hook 3种方法
1243 1
JS hook 3种方法
|
JavaScript API 数据安全/隐私保护
数美滑块验证码分析
本文以官网的滑块验证码为例,分析验证过程,完成模拟验证。
2237 0
数美滑块验证码分析
|
安全 Java API
Java 21:有什么新变化?
Java 21:有什么新变化?
483 0
Java 21:有什么新变化?