当前位置:网站首页>Anti App so层对抗分析
Anti App so层对抗分析
2022-08-09 09:19:00 【Codeooo】
1.jadx反编译,查看
直接在onCreate之前就进行加载了一个so
static {
System.loadLibrary("antidebug");
}
查看so有大文章:
直接分析动态注册:
静态分析 改改参数:
至于怎么静态改,查阅之前博客:https://blog.csdn.net/weixin_38927522/article/details/119672156

if (((*vm)->GetEnv)(vm) || (v4 = anti_time(), anti_breakpoint(v4, v5), anti_pthread(), registerNativeMethod(v6)) )
result = -1;
else
result = 65540;
jclass FindClass(const char* name) FindClass(查找java中的类)
jclass cls = (*env)->FindClass(env, “类路径”);
|| 或
(v4 = anti_time(), anti_breakpoint(v4, v5), anti_pthread(), registerNativeMethod(v6))
这里有一个成立,则会返回-1
=========anti_time():

v0 = getpid(); 获取进程id

gettimeofday(&v3, &tz);
gettimeofday(&tv, &tz);
v1 = tv.tv_sec - v3.tv_sec; 秒数相减
时间函数,传入两个值,进行相减,看结果是否大于1s
大于1: kill掉进程,并返回1
小于1 :直接返回0
=========anti_breakpoint:

if 是 v2,则进入循环,否则报错retuern 0
v2 = GetLibAddr();
v3 = v2;
if ( v2 )
v2为获取的地址值, 地址值若获取到则必然大于1为真:

这一块循环,都会走到:LABEL_11: return 1
经过我们分析,实际上我们要过掉反调,就应让他返回false
V6:
v2 = GetLibAddr();
v3 = v2;
v6 = *(v3 + 44); 地址+ 44
v4:初始值为0
这样地方可以考虑在IDA动态调试的时候: 将 if ( v4 >= v6 ) NOP掉直接走break
也可以用010Editor直接修改so 将大于改为小于 方法很多
==========anti_pthread():

这个地方很明显就是开线程:
v1 = pthread_self(); 获取自身线程id
pipe(&pipefd); 加入管道 实现进程通信
pthread_create(&v1, 0, anti_thread, 0); 创建线程
上面未发现异常,看下创建线程时候,V1地址,V1为自己的线程id
anti_thread:

看这个,kill -9 强制杀死
kill(childpid, 9);
v2 = getpid();
kill(v2, 9);
这方法大致看了下,获取了线程做了一些操作

_stack_chk_guard:
详细查阅:https://wiki.osdev.org/Stack_Smashing_Protector 361
用来检查进出函数时堆栈是否平衡和数据是否被修改
v1 = fork(); 一个子进程。成功则赋值childpid,失败则关闭。

最后才是走registerNativeMethod注册函数:
//RegisterNatives,注册方法;
//第一个、第二个:env,clazz; 第三个:定义的数组名;第四个:数组元素的个数
边栏推荐
- TypeScript Brief (1)
- shell 定时监控并处理脚本
- unittest测试框架原理及测试流程解析,看完绝对有提升
- web测试之功能测试常用的方法有哪几种?有什么要点要注意?
- 性能测试包括哪些方面?分类及测试方法有哪些?
- The era of Google Maps is over, how to view high-definition satellite image maps?
- 【百日行动】炎炎夏日安全不松懈 消防培训“加满”安全知识“油”
- 本体开发日记05-努力理解SWRL(Usage Suggestions)
- A first look at the code to start, Go lang1.18 introductory refining tutorial, from Bai Ding to Hongru, the first time to run the golang program EP01
- 营养与健康(HIT2021秋)
猜你喜欢
随机推荐
软件测试面试题目:请你列举几个物品的测试方法怎么说?
测试用例的原则、缺陷报告怎么写你都知道吗?
软件测试外包公司怎么样?有什么好处和坏处?为什么没人去?
MVCC multi-version concurrency control
使用图新地球无法加载谷歌地球的完美解决方法(附软件下载)
Consolidation of Questionnaire Questions and Answers
运行flutter项目时遇到的问题修改flutter为国内镜像
游戏测试的概念是什么?测试方法和流程有哪些?
mysql进阶(三十一)常用命令汇总
本体开发日记05-努力理解SWRL(RDF Concrete Syntax)
[Pytorch] Install mish_cuda
【培训课程专用】CA/TA调用模型-代码导读
学习栈的心得和总结(数组实现)
接口测试的概念、目的、流程、测试方法有哪些?
ASP.net中的数据库应用
上帝视角看高清村庄卫星地图,附下载高清卫星地图最新方法
软件测试面试中,面试官问你一些比较“刁难”的问题你会怎么回答
lateral view explode的另一种实现方式
jfinal加载配置文件原理
【Pytorch】安装mish_cuda





