当前位置: 首页 > news >正文

从一道题目(阿里2014 Crackme_2)开启unidbg还原算法入门(转载)

转载链接 一个学弟写的文章,我来转载一下,据我所知阿里2014这个题目 分析最明白的应该就是这个学弟的文章了

从一道题目开启unidbg还原算法入门

Trace环境搭建

Trace其实就是记录指令的运行以及内存的状态变化。如果能跑trace就可以在文本里面观察值的变化以及变化行为。能够更好的让我们关注内存数据在运行中的变化。

我们从前两篇文章里面其实已经知道,apk的lib其实是在初始化的时候修改的内存数据,所以我们需要在还没初始化的时候就设置trace逻辑。

下面是我写的unidbg trace逻辑

public void trace(){String traceFile = "unidbg-android/src/test/java/com/ctf/trace.txt";PrintStream traceStream = null;try{traceStream = new PrintStream(new FileOutputStream(traceFile), true);} catch (FileNotFoundException e) {e.printStackTrace();}//核心 trace 开启代码,也可以自己指定函数地址和偏移量emulator.traceCode().setRedirect(traceStream);}

然后要在加载目标so之前运行并且调用这个函数就可以

Trace文件分析

寻找修改flag逻辑

看trace文件分析对比点,从这里可以发现基地址是0x12000000,我们查看4450的地址其实就是 flag对比的点。

那我们只需要看是哪里修改了4450这个内存地址就可以了,只需要加一行代码

AliCrackme_obj.emulator.traceWrite(0x12004450,0x124e4e40+0x12);

发现log输入如下

让我们在binary ninja里面找到对应的地方

欸?这是什么情况。这里要介绍一个概念,叫做smc:

代码自修改(Self-Modifying Code, SMC)是指程序在运行时修改自身指令的技术,这种技术可以用于增强软件的保护,使其更难被逆向工程分析和破解。主要通过运行时修改内存中的指令来实现,使得反汇编结果与实际执行逻辑不符,增加分析的难度。

也就是说,这个代码在运行的时候,修改了这段代码的执行逻辑,所以在静态的时候没有办法看出相关的逻辑,需要动态调试或者静态还原这个代码逻辑。

其实unidbg 已经帮我们还原了,在这里面看,已经是被还原的逻辑了。字节码都已经改变了。其实如果想省事一点,直接解析这个trace,然后直接对着binary ninja patch 就可以了。但是笔者想从头到尾去分析这个apk,所以我们继续看是在修改代码。

寻找修改代码逻辑

省略

总结

这个题目虽然比较老,但是应该有的东西都有,msc、反调试、指针动态获取等,用来入门正好。随便给大家留一个作业,请分析这个app lib的所有运行逻辑

http://www.dtcms.com/a/280332.html

相关文章:

  • 强化学习书籍
  • vscode 打开c++文件注释乱码
  • 分布式存储之Ceph使用指南--部署篇(未完待续)
  • Claude 背后金主亚马逊亲自下场,重磅发布 AI 编程工具 Kiro 现已开启免费试用
  • 【交叉编译报错】fatal: not a git repository (or any of the parent directories): .git
  • 分布式全局唯一ID生成:雪花算法 vs Redis Increment,怎么选?
  • 内存的基础相关知识,什么是内存,内存管理
  • 死锁问题以及读写锁和自旋锁介绍【Linux操作系统】
  • Spring 中 @Component和@Bean注解的区别
  • 为何说分布式 AI 推理已成为下一代计算方式
  • SpringBoot 2.x→3.0升级实战:Jakarta EE兼容性改造清单
  • kotlin布局交互
  • Kotlin聚合方法
  • Python 操作Excel工作表:添加、删除、移动、隐藏
  • 前端安全指南:防御XSS与CSRF攻击
  • 给 Excel 整列空格文字内容加上前缀:像给文字穿衣服一样简单!
  • Excel制作玫瑰图
  • PostgreSQL FATAL: sorry, too many clients already 连接数爆满的处理办法
  • excel 通过openpyxl表格下载和插入图片
  • 京东平台商品评论接口接入指南与代码实现
  • 国内大模型技术与应用综述
  • 区块链:以太坊侧链Polygon
  • 日常运维问题汇总-59
  • STL的一些知识点
  • C/C++宏定义中do{}while(0)的妙用
  • CAS单点登录架构详解
  • 弗兰肯斯坦式的人工智能与GTM策略的崩溃
  • (LeetCode 每日一题) 3136. 有效单词 (字符串)
  • 【牛客LeetCode数据结构】单链表的应用——移除链表元素问题、链表分割问题详解
  • 从零构建鸿蒙应用:深度解析应用架构与项目结构