【逆向学习笔记2】Android简单静态分析


安卓逆向会涉及一些java的常用函数,这里整理了一些wiki上的例题中出现的函数。

CTF Wiki总结

  1. 基本方法:通过对Java层或原生层的代码进行静态分析和动态调试,分析程序的功能。
  2. 关键代码在.xml 文件中。

Java层

  1. this.myDataBase.:意思是进行了数据库的访问。
    获取数据库文件的指令:adb pull 数据库路径/数据库名称
  2. getCrc(): 返回未压缩条目数据的 CRC-32 校验和;如果未知,则返回 -1。
  3. Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种.dex格式文件的汇编器,反汇编器。可以利用 smali.jar 将 smali 汇编为 dex 文件:
    java -jar smali.jar assemble  src.smali -o src.dex
    
    dex文件:Android平台上可执行文件的类型,包含应用程序的全部操作指令以及运行时数据。
    dex文件的产生途径:当java程序编译成class后,使用dex工具将所有的class文件整合到一个dex文件。
    (附上一篇dex文件的解说,内含dex文件的结构、内容)
    因此对dex文件进行反编译,能得到原java代码各个class的信息。(wiki上使用的是jadx工具)

原生层

基本思路:提取so文件-> ida反编译so文件->结合java层的代码进行分析

  1. so 文件:动态链接库,是二进制文件,即ELF文件。
    内外都有接口,导入IDA中能查看到Exports窗口(导出表,方便Java层能调用SO层的函数)
    和Imports窗口(导入表,方便SO层调用Java层的函数)。
  2. apk的主活动在“activity”标签上。
  3. RegisterNatives:通过动态注册来绑定native函数。
    System.loadLibrary(“native-lib”):加载这个动态链接库(将代码加载入内存中)。
    JNINativeMethod结构体有三个成员,第一个是java层的方法名,第二个是方法签名(括号内是参数类型括号后是返回类型),第三个是C函数指针。这样三个参数就便成了一组注册信息。
    (直接查看第三个参数即可得到具体的注册信息)
    (这个函数的实现我还没看懂,先附上篇解说的文章,看懂后再更新…)

攻防世界例题

app2

首先用android逆向工具(该工具安装比JEB简单多了,附上下载链接,墙裂推荐)提取其中的dex文件
在这里插入图片描述
再将生成的dex文件转成jar文件(生成后会自动用JD-GUI打开):
在这里插入图片描述
查看MainActivity,发现其调用了SecondActivity
在这里插入图片描述
在SecondActivity中它又调用了doRawData函数
在这里插入图片描述
点进去跟进一下,发现它用了loadLibrary函数,就是之前说的将代码加载到内存中。这时就需要去看so文件了。
在这里插入图片描述
将其中一个so文件拖进ida中查看(这里我拖的是libJNIEncrypt.so),找到doRawData函数。 在这里插入图片描述
按下tab键查看汇编语言,可知AES加密的密钥是 “thisisatestkey==”
在这里插入图片描述
拿这个密钥去解SecondActivity中的"VEIzd/V2UPYNdn/bxH3Xig==",解出来的是aimagetencent
在这里插入图片描述
没啥头绪。看过一些wp里面的不同方法,有的是把apk文件放到安卓系统上,拿这个解出来的字符串当账号密码登录,不行;有的是访问aimage/tencent网站,也不行。实际上解得的这串字符没有意义…
但是在看回class文件,会发现有个FileDataActivity没有调用过。点击查看,有个“setText”函数:
在这里插入图片描述
拿这一串字符串再去解密,就解出来了。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值