type
status
date
slug
summary
tags
category
icon
password

ez_learn:

32位无壳程序,直接进行ida分析
notion image
有汇编说明没有反编译好,估计是有花指令,分析一下
notion image
打开这个看看指令数据都是什么
notion image
这里一看就是花指令,这个花指令是控制堆栈混淆ida的识别,先来分析一下这个花指令
notion image
 
将阴影部分nop掉
将所有这样的代码改为nop我们就去除了花指令,反编译看一下
notion image
very nice
进一步查看加密代码部分
查看具体内容
notion image
首先是对key进行了运算,先去看key的加密
notion image
在key的加密里面还有花指令,还是那样进行去除
但是可以直接dump下来key,不需要再进行还原了
但是在你调试的时候会发现退出,说明有反调试,就是在导出表里面的TLScallback函数,直接将其nop或者改变逻辑就可以
下面主要说明一下enc的加密:
其实下面这个就是SM4的魔改加密,但是就是想要死扣算法hhh
 
解密就是这样的操作,此处学习的点是struct包的使用
struct.pack(fmt, v1, v2, ...)
作用是将v1,v2的值按照fmt的格式转换为字节流
返回值:转换后的字节串
 
struct.unpack(fmt, buffer)
将字节流按照fmt转换为相应的类型
常见的格式化字符
 
 

Rustdroid:

安卓动态调试的流程:

直接动态调试,对于key的获取直接使用dump的方式,对于密文我们选择爆破或者z3求解,所以关键点就是对加密流程的理解,将加密代码表达更清晰一些
 
 
给一下解密代码(Z3版)
 
此处我的问题出在LShR上,我用的算术右移,导致出错,所以我们要注意逻辑右移的操作
解密代码,爆破版
对于这个代码,我直接把他的最后加密的stream[]那一部分直接dump下来,因为代码里面有许多不好写的地方就直接改进了,W2就是以获得值
notion image
 
得到
得到flag
WMCTF{2a04aed7-e736-43c4-80a7-f6ed28de34eb}
 

re1

这个安卓题考点是动态注册和hook函数

动态注册:

 
下面具体给一下代码的实现,也方便我们以后的识别
 

静态注册:

静态注册的方法相比于动态注册就显得是一个特定的规则
先后加载顺序
  • 加载 .so
  • 声明 Java 本地方法
  • 实现对应的 C/C++ 函数
  • 调用本地方法
 
 

安卓执行顺序:

  • 1、动态链接器加载 SO 文件。
  • 2、加载 .init_array 并调用其中的构造函数(这些函数会在 JNI_OnLoad 之前执行)。
  • 3、调用 JNI_OnLoad 函数进行 JNI 方法的注册和其他初始化操作。
  • 4、应用的其余部分开始运行,包括对 Java 层的 JNI 调用。
在ida中查找.init_array这个的方法:
 
 
现在分析so文件
notion image
这个就是在.init_array的hook函数,把前面的这些函数hook成后面的这些,前面的这些就是我们的check函数,我们可以在JNI_Onload里面找
notion image
 
和我们前面分析的很像,所以我们直接找那个method列表
notion image
我们第三个就是指向函数,也就是我们真正的check函数
notion image
 
就是将encode里面的函数hook成那些
notion image
 
经过这个我们可以发现他就是一个xtea,但是经过了魔改,我们直接写脚本解密
 

easy_android

有点难,等我学学unidbg这些再来补充
 
Unicorn学习记录安卓逆向
Loading...