对某APP8逆向学习记录简单记录(二)
1.简单记录一下一些学习过程
来源:aHR0cHM6Ly9hcHA4LnNjcmFwZS5jZW50ZXIv
目的:考虑经常性的忘记一些学习资料和文件,故在网络上记录一下。
这是一个练习平台的相关题目。
2.结果:
app8和app5 基本一致,并没有太多混淆,主要在so层逻辑。
结果与 [对某APP5逆向学习记录简单记录(一)](https://editor.csdn.net/md/?articleId=131749157)
相同不再赘述。
3.网页代码分析:
抓包分析,与前一篇类似不再赘述。
无加固。
这里重点讲讲不同之处。
反编译之后定位如下:
这里可以看出传入了一个列表参数其实就是’/api/movie’,以及一个整型的偏移量
点击调用函数,跳转到如下页面:
可以看出这是一个navaite 层处理的方法,也就是通常so文件处理。
在解压的文件中lib 文件下可以看到,某ibnative.so文件
通过ida 工具打开即可(注意32还是64位的)。
在打开的页面直接ctrl+f 搜索NativeUtils,
搜索一条结果,点击查看,看不懂!f5编译为类C语言。
计算逻辑都在这个页面。
此次 进行native 进行处理
public class Encrypt {
public static String encrypt(List<String> strings, int offset) {
return NativeUtils.encrypt(TextUtils.join("", strings), offset);
}
}
对encrypt 方法进行了隐藏(so层)
public class NativeUtils {
public static native String encrypt(String str, int i);
static {
System.loadLibrary("native");
}
}
#在lib 文件夹中 找到 xibnative.so文件, 通过ida 通过打开 , 简单对该逻辑进行梳理。
v4 = a1;
v5 = a3; // 原始路径 /api/movie
v6 = a4; // offset
sub_F6D0(&v22); // 创建新数组v22
系列操作
sub_F6E6(&v22, &v21);
a3 赋值给v22
// 下面 将xfdLnciVh4FxQbri 赋值给v22
std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::basic_string<decltype(nullptr)>(&v20,"xfdLnciVh4FxQbri");
v8 = time(0); // v8 为当前时间错
sub_F758(&v22, &v18); v18 添加到v22
join(&v16, &v22, 44); v22 通过44(ascii的’,‘) 拼接存入 v16
sha1(&v17, &v16); // sha1 计算存入 v17
sub_F6D0(&v15); // 新建数据 v15
sub_F758(&v15, &v17); // 将v17 添加到数组v15
sub_F758(&v15, &v18); // 将v18 添加到数组v15
join(&v14, &v15, 44); // 通过44(',')拼接 数组 v15 存储到v14
basic_string(&v12, &v14); 将v14 存储到v12
b64encode(&v13, &v12); 对v12进行base64编码 然后存储到v13
后续做一些char数组转换和删除操作,返回处理后的 v11
2. 将so流程改写为python
大概分析流程如上。
分析流程结束!
4.总结:
整体难度一般,适合练习。
接下来还会对其他相关的app,重点分析过程做一些记录,尽量不再出现源码。