安卓逆向学习(一)

 最近吾爱开放注册了,翻到吾爱15年的陈年教程,加上突然想学安卓逆向,学习一下

关于APK文件的组成
之前在做项目的时候都是直接zip解压出来按照流程把class dex2jar一下用jd-gui看源代码,没太注意压缩包下每个目录的意义
asset文件夹:资源目录
lib文件夹:存在so库文件(记得有一次CTF的第二个逆向就是 加密算法放到了so库中
META-INF文件夹:存放一些属性文件,其中包含了一些说明版本、属性、入口类等
res文件夹:另一个资源目录,区别在于res的资源文件在编译时会自动生成R.java索引文件,在代码中要引用需要用R.xxx来引用,而asset下的资源文件不需要生成索引,在代码中用AssetManager访问,一般音频视频放在raw或asset下,其他放在res下,使用C++游戏引擎的资源文件放在asset下
AndroidMainfest.xml:整个工程的基础配置属性文件
classes.dex:java代码编译得到的虚拟机能直接运行的文件
resources.arsc:对res目录下资源的索引文件

对APK文件进行修改的话是修改.smali文件而不是导出java文件直接更改
smali语法应该是在看的时候需要用到再去查吧。
对象用LpackageName/objectName表示
类里面的类用LpackageName/objectName$xxx表示 多一个$符号对象里成员的话a->必须要La/b;->c 要记得有分号

smali里面的方法定义 在名字之后是没有间隔符的,函数名+空格+括号(内带参数没有分隔符)+函数返回值
我看看实际代码分析...

smali中部分条件分支语法长得跟汇编比较像
其余
const/high16 v0,0x7fo3 赋值
.field 定义变量
.method 方法
.parameter 方法参数
.prologue 方法开始
.line 123 方法位置
invoke-super 调用父函数
invoke-direct 直接调用函数
return-void 返回void
.end method 方法结束
new-instance 创建实例
input-object 对象赋值
iget-object 调用对象
invoke-static 调用静态函数
.class 指什么包下的类
.super 继承自XXX
.source 由哪个文件编译得到的文件
声明
.annotations开头 .end annotation结尾
v开头为本地寄存器
p开头为参数寄存器,但是非static函数中 p0为this P1才是第一个参数,再static中p0才是第一个参数 因为java static没有this方法,没有实例。

direct方法都是private函数,public和protected函数都是virtual方法
还有 invoke-xxx 几种不同的指令

试着看看代码翻译

.local 4   #4个寄存器
const/4 v2,0x1     # v2寄存器存0x1 4字节 v2=1
const/16 v1,0x10 #v1存16 16字节 v1=16
.local v1,"length":I #声明Int型length变量内容为v1 int length=1
if-nez v1,:cond_1 #v1不等于0 跳转到cond_1
:cond_0  #cond_0标签
:goto_0  #goto_0标签
return v2 #返回v2的值
:cond_1  #cond_1标签
const/4 v0,0x0 #v0寄存器 4字节 
:local v0, "i":I #int i=0
:goto_1  #goto_1标签
if-lt v0, v1, :cond_2 #if v0<v1 goto cond_2
const/16 v3,0x28  # v3=40
if-le v1,v3, :cond_0 #if v1<=v3 goto cond_0
const/4 v2, 0x0 #v2=0x0
goto:goto_0 #goto goto_0
:cond_2 #cond_2 标签位置
xor-int/lit8 v1, v1, 0x3b #v1=v1^59
add-int/lit8 v0, v0, 0x1  #v0=v0+1 将第二个参数寄存器的值+第三个参数放到第一个参数寄存器里
goto:goto_1  #跳转到goto_1

代码版本:
v2=1
v1=16
int length=1
if (v1!=0){
v0=0
int i=v0
while(v0<v1){
v1=v1^59
v0++
}
if(v1>40){
v2=0
}}
return v2

今天就先到这里了,赶工作去咯~
PS:上头的标准真的是越来越不能理解了


发表评论 暂无评论

*