app逆向学习记录——2

一 反编译工具

1.1 常见反编译工具

常见的反编译工具:jadx(推荐)、jeb、GDA
反编译工具依赖于java环境,所以我们按照jdk

1.2 JDK环境安装

# 官方地址:(需要注册-最新java 21)
https://www.oracle.com/java/technologies/downloads/

### 1.2.1 win平台安装

```python
# 1 下载jdk-8u371-windows-x64.exe
# 2 双击安装

1.2.2 mac平台安装

# 1 下载jdk-8u371-macosx-x64.dmg
# 2 双击安装

1.2.3 验证是否安装成功

java -version  # 看到打印安装成功
'''
java version "1.8.0_371"
Java(TM) SE Runtime Environment (build 1.8.0_371-b11)
'''

1.3 jdax安装

1.3.1 下载地址

# 1 官网
https://github.com/skylot/jadx/releases

# 最新:1.4.7 推荐:1.2.0,后期都会用

1.3.2 安装

请参照相关文档安装。

二 反编译后代码定位

2.1 抓包

# 打开app,运行,使用抓包工具抓包,发现密码是加密的
# 这时候咱们需要,反编译后,定位到代码位置

在这里插入图片描述

2.2 反编译定位位置

# 通过:URL网址 或 参数关键字  `pwd`   `"pwd"`    put("pwd    等关键字搜索
# https://dealercloudapi.che168.com/tradercloud/sealed/login/login.ashx

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述
在这里插入图片描述

# 我们发现,定位到代码,但是读不懂什么意思,只能靠猜测和比较
import hashlib
str='1234567'
res=hashlib.md5(str.encode('utf-8')).hexdigest()
print(res)

## 注意:这个过程需要掌握Java和安卓开发。所以后期我们要学习java知识和安卓开发

三hook框架frida

Hook 框架是一种技术,用于在运行时拦截和修改应用程序的行为。
通过 Hook,你可以劫持应用程序的方法调用、修改参数、篡改返回值等,以达到对应用程序的修改、增强或调试的目的
# 常见的有:
Xposed Framework:Xposed 是一个功能强大的开源 Hook 框架,可以在不修改应用程序源代码的情况下,对应用程序进行各种修改。它允许你编写模块来拦截和修改应用程序的方法调用,修改应用程序的行为和逻辑。

Frida:Frida 是一个跨平台的动态 Hook 框架,支持安卓和其他操作系统。它提供了一个强大的 JavaScript API,可以在运行时对应用程序进行 Hook,包括方法拦截、参数修改、调用注入等。Frida 可以用于安全研究、逆向工程和应用程序调试等方面。

3.1 下载安装

# 注意:需要电脑端[电脑端要安装python解释器环境]和手机端同时安装,版本必须对应

3.1.1 电脑端安装

# 指定版本安装
pip install frida==16.0.1
pip install frida-tools==12.0.1

# 安装最新版
pip install frida        # 16.0.9
pip install frida-tools  # 12.1.2


# 正常都可以顺利安装,若安装出现错误,下载源码包安装
#### 必须根据 :frida版本 + Python版本 + 操作系统 来选择下载响应的egg或whl文件。
https://pypi.doubanio.com/simple/frida/

pip install frida-16.0.1-cp37
### 使用 Frida 实现反调试技术 #### 反调试概述 在逆向工程过程中,目标程序通常会集成各种形式的防调试机制以阻止分析人员深入了解其运行逻辑。这些保护措施可能包括但不限于检测是否附加了调试器、检查进程状态以及监控特定事件的发生等[^1]。 #### 基于Frida实现反调试的具体方法 ##### 1. 阻断常见的调试接口调用 许多移动应用程序会在启动初期执行一系列用于确认环境安全性的验证过程。如果发现有外部工具试图干预,则立即终止自身或其他异常行为作为响应。为了绕过此类限制,可以采用拦截并修改敏感函数返回值的方式: ```javascript Interceptor.attach(Module.findExportByName(null, 'isDebuggerPresent'), { onEnter: function (args) { this.return_value = false; // 修改默认判断结果为未被调试 }, onLeave: function (retval) { retval.replace(this.return_value); // 替换原始输出 } }); ``` 此段脚本展示了怎样利用 `Interceptor` API 来挂钩 Windows 平台下的标准库函数 `IsDebuggerPresent()` ,从而欺骗目标认为当前不存在任何调试活动正在进行中[^4]。 ##### 2. 处理动态加载模块中的隐藏逻辑 对于那些采用了复杂加载策略的应用来说,仅仅依靠静态分析往往难以获得完整的代码路径覆盖度。此时借助像 Frida 这样的注入框架能够实现在内存层面实时跟踪新引入的对象及其关联的操作流。特别是针对经过高度优化甚至加密处理后的二进制文件而言,这种方法尤为有效[^3]。 例如,在面对 Flutter 应用时,由于其独特的编译方式使得传统的字节码解析变得不再适用;而通过上述手段则可以在不解密的前提下获取到更多关于内部组件交互的信息[^2]。 ##### 3. 绕过基于时间戳或计数器的时间差攻击防御 部分软件可能会记录下每次重要操作之间所耗费的实际秒数,并据此推算是否存在人为延缓现象——这通常是手动单步追踪留下的痕迹之一。对此类情况可以通过调整系统时钟读取函数的行为来达到目的: ```javascript var orig_gettime = new NativeFunction(Module.findBaseAddress('libc.so').add(0x7f8), 'int', ['pointer']); function fake_gettime(buffer){ var result = orig_gettime(buffer); Memory.writeUtime(buffer.add(Process.pointerSize), Date.now() / 1e3 | 0); // 设置固定的时间点 return result; } Interceptor.replace(orig_gettime.address, Interceptor.createCallback(fake_gettime)); ``` 这段 JavaScript 脚本实现了对 Linux 系统上常用的 `gettimeofday()` 函数替换,确保无论何时查询都能得到一致的结果,进而规避因时间间隔不正常引发的安全警报。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值