【Android逆向】破解看雪test3.apk方案二
方案二就是要hook那三个条件,不让追加字符串变成false
v20 = "REAL";
clazz = _JNIEnv::FindClass(env, "android/os/Build");
fieldID = _JNIEnv::GetStaticFieldID(env, clazz, "FINGERPRINT", "Ljava/lang/String;");
StaticObjectField = (_jstring *)_JNIEnv::GetStaticObjectField(env, clazz, fieldID);
if ( function_check_tracerPID()
|| system_getproperty_check()
|| (StringUTFChars = (char *)_JNIEnv::GetStringUTFChars(env, StaticObjectField, 0), strstr(StringUTFChars, "aosp")) )
{
v20 = "FAKE";
}
- hook Build 类的FINGERPRINT
- hook function_check_tracerPID
- hook system_getproperty_check
代码如下
function main() {
Java.perform(function () {
hookCheck()
var MainActivityHandler = Java.use('com.roysue.easyso1.MainActivity')
for (var i = 87650; i <= 87700; i++) {
var str = i + ""
var ret = MainActivityHandler.Sign(str)
if (i % 1000 == 0) {
console.log("now is", str);
}
//console.log(ret)
if (ret == "57fdeca2cac0509b2e9e5c52a5b573c1608a33ac1ffb9e8210d2e129557e7f1b") {
console.log("find it : " + str)
break
}
}
console.log("end : ")
})
}
function hookCheck() {
var lib_hanlder = Process.findModuleByName("libroysue.so");
console.log("lib_handler: " + lib_hanlder)
if (lib_hanlder) {
var symbols = lib_hanlder.enumerateExports()
for (var i = 0; i < symbols.length; i++) {
var f_symbol = symbols[i]
//function_check_tracerPID()
if (f_symbol.name.indexOf("function_check_tracerPID") >= 0) {
var f_func_addr = f_symbol.address
console.log("function_check_tracerPID is at ", f_symbol.address, f_symbol.name);
Interceptor.attach(f_func_addr, {
onEnter: function(args) {
},
onLeave: function(retVal) {
console.log("function_check_tracer retval is => ", retVal)
//兩種都行
//retVal.replace(new NativePointer(0));
retVal.replace(0);
}
})
}
//system_getproperty_check()
if (f_symbol.name.indexOf("system_getproperty_check") >= 0) {
var f2_func_addr = f_symbol.address
console.log("system_getproperty_check is at ", f_symbol.address, f_symbol.name);
Interceptor.attach(f2_func_addr, {
onEnter: function(args) {
},
onLeave: function(retVal) {
console.log("system_getproperty_check retval is => ", retVal)
//兩種都行
//retVal.replace(new NativePointer(0));
retVal.replace(0);
}
})
}
}
}
var BuildHandler = Java.use("android.os.Build")
if (BuildHandler) {
console.log("=== FINGERPRINT: " + JSON.stringify(BuildHandler.FINGERPRINT.value))
BuildHandler.FINGERPRINT.value = "1234"
}
}
setTimeout(main, 2000)
日志
lib_handler: [object Object]
function_check_tracerPID is at 0xc7004aad _Z24function_check_tracerPIDv
system_getproperty_check is at 0xc7005001 _Z24system_getproperty_checkv
=== FINGERPRINT: "1234"
function_check_tracer retval is => 0x1
system_getproperty_check retval is => 0x0
function_check_tracer retval is => 0x1
system_getproperty_check retval is => 0x0
function_check_tracer retval is => 0x1
system_getproperty_check retval is => 0x0
function_check_tracer retval is => 0x1
system_getproperty_check retval is => 0x0
function_check_tracer retval is => 0x1
system_getproperty_check retval is => 0x0
find it : 87654
end :
【Android逆向】破解看雪test3.apk方案二的更多相关文章
- Android逆向破解表单注册程序
Android逆向破解表单注册程序 Android开发 ADT: android studio(as) 程序界面如下,注册码为6位随机数字,注册成功时弹出通知注册成功,注册失败时弹出通知注册失败. 布 ...
- Android逆向破解表单登录程序
Android逆向破解表单登录程序 Android开发 ADT: android studio(as) 程序界面如下,登录成功时弹出通知登录成功,登录失败时弹出通知登录失败. 布局代码 <?xm ...
- Android逆向——破解水果大战
最近公司需要测试安卓app安全,但安卓基本上0基础,决定开始学习下安卓逆向根据吾爱破解上教程 <教我兄弟学Android逆向系列课程+附件导航帖> https://www.52pojie. ...
- Android逆向 破解第一个Android程序
这节正式开始破解编写的第一个Android工程,打开Android Killer,把第一节自己编写的Android apk拖入Android Killer. PS: 如果Android Killer不 ...
- Android逆向破解:Android Killer使用
目录 目录 软件介绍 Android Killer是一款可以对APK进行反编译的工具,它能够对反编译后的Smali文件进行修改,并将修改后的文件进行打包. 软件下载 这里用的是@昨夜星辰2012 ...
- Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...
- Android 逆向实战篇(加密数据包破解)
1. 实战背景由于工作需要,要爬取某款App的数据,App的具体名称此处不便透露,避免他们发现并修改加密逻辑我就得重新破解了. 爬取这款App时发现,抓包抓到的数据是加密过的,如图1所示(原数据较长, ...
- Android逆向分析(2) APK的打包与安装背后的故事
前言 上一次我们反编译了手Q,并遇到了Apktool反编译直接crash的问题,虽然笔者很想在这次解决这个问题,但在解决途中,发现该保护依赖于很多知识,所以本次先插入一下,正所谓知其然知其所以然,授之 ...
- Android逆向分析(2) APK的打包与安装
http://blog.zhaiyifan.cn/2016/02/13/android-reverse-2/ 2/18日增加对aidl和java编译的描述. 前言 上一次我们反编译了手Q,并遇到了Ap ...
- 看雪论坛 破解exe 看雪CTF2017第一题分析-『CrackMe』-看雪安全论坛
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 逆向 黑客 破解 学习 论坛 『CrackMe』 http://bbs.pediy.co ...
随机推荐
- shell补遗_一个巨简单的保证服务存活的脚本
Shell补遗 背景 公司一台机器总是会在没有更新补丁的情况下启动失败. 查看所有的配置都没有问题. 但是就是不启动 没办法,准备写一个检查进行启动. 最近写shell很少. 所以总结一下. 思路 判 ...
- [转帖]Linux系统中的Page cache和Buffer cache
Free命令显示内存 首先,我们来了解下内存的使用情况: Mem:表示物理内存统计 total:表示物理内存总量(total = used + free) used:表示总计分配给缓存(包含buffe ...
- [转帖]Redis 核心篇:唯快不破的秘密
文章系转载,方便整理和归纳,源文地址:https://z.itpub.net/article/detail/4B5A03BDDBE9A2BC3E080E278FE4D21E 以下文章来源于码哥字节 , ...
- [转帖]Mars II - Microarchitectures - Phytium
https://en.wikichip.org/wiki/phytium/microarchitectures/mars_ii Edit Values Mars II µarch General In ...
- [转帖]手把手教你在QEMU上运行RISC-V Linux
https://kernel.0voice.com/forum.php?mod=viewthread&tid=3080 嵌入式Linux内核 发布于 2023-3-15 14:44:37 ...
- 一个简单的监控java进程获取日志的办法
公司里面一个长时间运行的环境会出现问题, 这边简单写了一个脚本自动获取日志信息 脚本如下 注意 我的path 其实就是复用的 我们应用里面的jdk 剩下的就非常简单了. 每个日志都自动打包 并且移除 ...
- Win10 查看无线局域网的密码
1. 打开命令行 输入 control 打开控制面板 2. 进入网络和共享中心 3. 打开连接 4. 使用如下进行查看.
- 软件缺陷(bug)
生活中我们肯定听过身边的朋友说过:'这tm就是个bug','你就是bug一样的存在' 等话语.当你听到这句话的时候或许有些懵逼或许认为这货说的什么玩意.其实当你想成为一名测试工程师的时候你就要天天和b ...
- Ant Design Vue照片墙a-upload
<template> <div class="clearfix"> {{ fileList }} <a-upload list-type=" ...
- Python 基础知识点归纳
Python 是一种跨平台的计算机程序设计语言,是一种面向对象的动态类型语言,笔记内容包括编译安装python,python列表,字典,元组,文件操作等命令的基本使用技巧. 编译安装 Python P ...