|
|
[求助]只知道app的字符串明文的情况下,字符串有加密,怎么找到调用函数地址?
1. 定位起点 (从Java层入手) · 在Java代码中找到使用该加密字符串的地方(例如,一个参数或返回值)。 · 使用 Frida Hook 相关的Java方法,打印其参数和返回值,确认加密行为发生的位置。 2. 追踪至Native层 · 如果加密逻辑在Native层(.so文件),Java代码会通过System.loadLibrary或JNI函数调用。 · 继续用 Frida Hook 这个JNI函数或相关的Native函数,获取关键的Native函数地址。 3. 定位关键函数 · 一个有效思路是:字符串解密函数通常会被频繁调用。你可以用IDA Pro分析.so文件,统计所有函数的交叉引用次数,调用次数最多的那几个函数很可能就是字符串解密或初始化函数。 · 找到可疑函数后,用 Frida 直接Hook该函数地址,验证其输入(密文)和输出(明文)。 4. 深入静态分析 · 使用 IDA Pro 打开.so文件,跳到之前找到的函数地址,进行反编译和深入分析,理解其完整算法。 5. 考虑使用unidbg (如遇复杂对抗) · 如果App有很强的反调试检测,导致Frida难以附加,可以考虑使用 unidbg。它是一个基于Unicorn的模拟执行工具,可以在沙箱中直接运行.so文件,绕过真机的各种保护机制。但请注意,unidbg本身也有被检测的风险。 |
|
|
[求助]电脑端企业微信剪切板WeWork Message格式数据序列化和反序列化算法
import sys import binascii from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit, QPushButton, QTextEdit, QVBoxLayout, QHBoxLayout) from PyQt5.QtGui import QClipboard class WeWorkClipboardTool(QWidget): def __init__(self): super().__init__() self.initUI() self.clipboard = QApplication.clipboard() # 系统剪贴板对象 def initUI(self): self.setWindowTitle("WeWork剪贴板同步工具") self.resize(600, 400) # 格式名称输入 format_layout = QHBoxLayout() format_layout.addWidget(QLabel("格式名称:")) self.format_edit = QLineEdit("WeWork Message") format_layout.addWidget(self.format_edit) # 提取数据按钮 self.extract_btn = QPushButton("提取数据") self.extract_btn.clicked.connect(self.extract_data) # 提取的数据显示 extract_layout = QVBoxLayout() extract_layout.addWidget(QLabel("提取的数据(十六进制):")) self.extract_text = QTextEdit() extract_layout.addWidget(self.extract_text) # 写入数据按钮 self.write_btn = QPushButton("写入数据") self.write_btn.clicked.connect(self.write_data) # 要写入的数据输入 write_layout = QVBoxLayout() write_layout.addWidget(QLabel("要写入的数据(十六进制):")) self.write_text = QTextEdit() write_layout.addWidget(self.write_text) # 整体布局 main_layout = QVBoxLayout() main_layout.addLayout(format_layout) main_layout.addWidget(self.extract_btn) main_layout.addLayout(extract_layout) main_layout.addWidget(self.write_btn) main_layout.addLayout(write_layout) self.setLayout(main_layout) # 提取剪贴板数据并转十六进制 def extract_data(self): clipboard_data = self.clipboard.text() # 读取剪贴板文本 # 转十六进制(若为二进制数据,需用self.clipboard.mimeData().data()处理) hex_data = binascii.hexlify(clipboard_data.encode("utf-8")).decode("utf-8") self.extract_text.setText(hex_data) # 将十六进制数据转回剪贴板 def write_data(self): hex_data = self.write_text.toPlainText().replace(" ", "").replace("\n", "") try: raw_data = binascii.unhexlify(hex_data).decode("utf-8") self.clipboard.setText(raw_data) # 写入剪贴板 except binascii.Error: self.write_text.setText("十六进制格式错误!") if __name__ == "__main__": app = QApplication(sys.argv) tool = WeWorkClipboardTool() tool.show() sys.exit(app.exec_()) |
|
|
[求助]SafeNet 超级狗脱壳
你提供的代码片段是分析的关键: 关于“OEP”:10115617处的jmp 004767c5并非真正的程序入口点。004767C5处的add eax, dword ptr ds:[eax]是一个无效指令,说明这里是外壳设置的一个“陷阱”或“中转站”。真正被偷走的原始程序入口代码,在后续才会被还原并跳转过去。 关于“IAT”:你抓取的IAT表中混杂了大量test1.10119DD5这类指向外壳模块自身的地址,这正是IAT混淆的证据。外壳将原始的API调用地址替换成了自己的“跳板函数”,用于在每次API调用时插入校验或反调试代码。 核心思路与操作步骤 面对这种保护,你的核心策略需要从“找到OEP后DUMP”转变为 “跟踪并等待外壳完成所有修复”。 第一步:找到真正的原始OEP 在调试器中,从jmp 004767c5开始单步执行。注意,004767C5附近看似无意义的代码(如你列出的pop ecx, pop edx, push eax, call...)很可能是外壳在准备修复被窃取的代码。 重点跟踪那个call指令(004767D8)以及后续流程。真正的原始OEP通常会在一个大循环或递归解密过程结束后,通过一个jmp或retn指令跳转到程序原始的.text代码段。 当你跟踪到一个跳转,跳转目标地址是正常的函数开头(例如 55 8B EC 对应 push ebp; mov ebp, esp),并且该地址位于程序主模块(如test1.004xxxxx)的典型代码范围内时,这里才是真正的OEP。请记录下这个地址。 第二步:在正确时机修复IAT 时机是关键:不要在你现在的位置尝试修复IAT。必须在程序执行到真正的原始OEP之后,外壳才可能完成对IAT的最终修复。 找到真正OEP后,让程序运行几行代码,然后在OEP之后不远处下一个断点并中断。此时,内存中的IAT表可能已经被部分或全部修复。 使用 Scylla(或ImportREC)等工具附加到进程。填入你找到的真正OEP地址,然后点击 “IAT AutoSearch” 或 “Get Imports”。 如果仍然看到很多无效指针,尝试使用工具的 “Trace” 功能(如 Trace Level 1)来跟踪API调用,从而定位修复后的IAT。有时需要手动查找和修复部分项。 高级技巧与工具建议 对抗反调试:此类外壳通常有强烈的反调试。建议使用 x64dbg 配合 ScyllaHide 插件,并隐藏调试器。在OllyDbg中,可能需要使用 StrongOD 或 PhantOm 插件。 利用脚本:手动跟踪整个过程非常耗时。强烈建议你在看雪论坛等安全社区,搜索针对 Sentinel Protection (SuperDog) 或特定版本号的脱壳脚本(例如OllyScript, x64dbg脚本)。成熟的脚本可以自动化处理代码还原和IAT修复。 “软狗”优势:你拥有“软狗”(软件模拟狗),这意味着你可以在调试器中多次重启、尝试,而不用担心硬件锁的损耗。充分利用这一点,大胆尝试不同的断点策略。 重要风险再次提醒 重申,这些技术知识仅限用于你在法律允许范围内的学习、研究,或对自己拥有合法版权的软件进行备份与兼容性分析。未经授权对他人软件进行脱壳和解密,可能涉及侵犯著作权,并面临法律风险。 如果你在跟踪过程中发现了新的、更可疑的跳转或循环,可以随时提供新的代码片段,我们可以继续一起分析。祝你研究顺利! |
|
|
[原创]Android SO文件加载过程探究报告
电脑坏了,用手机随便发的,有管理在吗,帮忙整理一下 |
|
|
[注意]紧急声明,若近期一位QQ为2xx888,呢称为kanxue加你时,不是kanxue本人,敬请小心
谁敢冒充大理段氏,联合大宋攻打他。。。 |
|
|
[求助]这个32位MD5解密不出来
我不会32位的算法 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
勋章
兑换勋章
证书
证书查询 >
能力值