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

探寻闲鱼libsgmain加解密算法(4) ——JNI入口跳转

关注我的人都知道我一直在学习阿里的加密和算法,除了研究逆向问题,还会把学来的阿里技术用在自己的应用上。

为什么?因为学习大厂的应用,是进步最快的方法。而大厂在安全和加密方面的技术,个人觉得阿里做的是最好的。

所以的分析和代码,仅供学习使用。如有不适,随时联系本人删除。

上面一篇写到了JAVA层到JNI层的入口细节,这一篇就从JNI开始写。

sub_CC50函数很快就会遇到一个BX R2的跳转寄存器地址,导致无法反编译到C代码。这个我在前面的文章里面说过方法,即hook当前寄存器值,查看相应的值,然后Patch掉相应的代码,即可以查看。

但相应的要注意的地方是,要注意这个位置的跳转有几个,跳转的位置是否相同,这直接影响到你分析逻辑的细节。

比如我分析的逻辑到这里只有一个跳转,直接Patch即可。然后就可以相对愉悦地查看C的伪代码了。

然后,我们就可以发现,决定接下来逻辑跳转方向的,即为我们传入的code值。

程序会将code做几个操作,将code分解成几个值,再将其赋值给一个结构体:

int aInt = code / 10000;
int bInt = code % 10000 / 100;
int cInt = code % 100;struct sub_cc51_v7_data {int aInt;int bInt;int cInt;JNIEnv *env;int argObj;
}sub_cc51_v7_data v7_data;v7_data->aInt = aInt;
v7_data->bInt = bInt;
v7_data->cInt = cInt;
v7_data->JNIEnv = env;
v7_data->argObj = (int)objArr;

然后再调用 void sub_9EFC(int a1, int a2, int a3, int a4, struc_cc51_v7_data *a5, int a6)函数。

而更重要的逻辑跳转,则位于sub_9EFC函数中......

而接下来的内容,研究方向不同,方法也就不尽相同了。

结语:

我最近学习和研究的逻辑,在sub_9EFC中做了5次跳转,其中有3个不同的位置。可以说是相当核心的一个位置了。

而这个跳转位置,会提前根据相关的逻辑计算好,放在堆栈指针寄存器sp中,仅靠简单的伪代码无法完全还原出来。

具体的操作,还要看具体的思路了。


http://www.mrgr.cn/news/59145.html

相关文章:

  • cargo编译时Rust时如何自定义输出目录
  • <Project-11 Calculator> 计算器 0.3 年龄计算器 age Calculator HTML JS
  • Spring-SpringMVC-SpringBoot理解
  • JDK9——JDK13新特性总结
  • 国内动态短效sk5,http
  • 【已解决】C# NPOI如何在Excel文本中增加下拉框
  • 前端:localStorage和浏览器的历史记录(History API)
  • Springboot 整合 Java DL4J 实现智能客服
  • [Python学习日记-57] 常用模块的练习(答案更新中)
  • 爆破(使用Burp Suite)
  • 使用anaconda3创建Python 虚拟环境
  • C++ 在项目中使用vim
  • 【前端开发入门】JavaScript快速入门--js变量
  • 红黑树(Red-Black Tree)
  • 5.Linux按键驱动-fasync异步通知
  • 《人脸表情识别可解释性研究综述(计算机学报)》
  • 如何在Linux服务器后台训练模型
  • eks节点的网络策略配置机制解析
  • 对角双差速轮AGV的动力学解算
  • 【大数据技术基础 | 实验五】ZooKeeper实验:部署ZooKeeper
  • 028_Comma_Separated_List_in_Matlab中的逗号分割列表
  • 【C++初阶】一文讲通C++内存管理
  • 数据结构与算法分析:你真的理解排序算法吗——桶排序(代码详解)
  • redis高级篇之IO多路复用select方法简介 第174节答疑
  • 基于DDPG算法的股票量化交易
  • 【项目实战】HuggingFace初步实战,使用HF做一些小型任务