当前位置:网站首页>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; 第三个:定义的数组名;第四个:数组元素的个数
边栏推荐
猜你喜欢
随机推荐
MySQL查漏补缺(五)不熟悉的知识点
通用的测试用例编写大全(登录测试/web测试等)
Django实现对数据库数据增删改查(一)
swap交换分区
初窥门径代码起手,Go lang1.18入门精炼教程,由白丁入鸿儒,首次运行golang程序EP01
Domestic with Google earth software, see the download 19th level high-resolution satellite images so easy!
MySQL锁
约瑟夫问题的学习心得
C语言单、双引号的区别
全网最全的软件测试基础知识整理(新手入门必学)
Summary of steps and methods for installing and uninstalling test cases that you must read
本体开发日记05-努力理解SWRL(Usage Suggestions)
AES/ECB/PKCS5Padding encryption and decryption
本体开发日记04-努力理解protege的某个方面
常用功能测试的检查点与用例设计思路
可以写进简历的软件测试项目实战经验(包含电商、银行、app等)
MVCC multi-version concurrency control
Flutter的基础知识之Dart语法
MySQL查漏补缺(四)存储过程和游标
本体开发日记02-sparql简单查询