IDA反编译apk修改数据后重新打包

news2024/11/28 20:36:44

1、需要的工具

apktool、ida、il2cppDumper、ApkSignTools

2、说明

        如果是mono打包的,不管是apk还是exe,都可以直接拿到直接从包内拿到 Assembly-Csharp.dll,只要开发者没有对这个文件进行加密,都可以轻松用 ILSpy 或 dnSpy 进行反编译看到代码和内部逻辑,修改起来也非常简单。我推荐用dnSpy,个人感觉它更加美观、强大、方便,修改代码后保存一下即可生效。但如果是IL2CPP方式出包的,就比较麻烦了。

3、具体步骤(IL2CPP方式)

(1)apk 解压

        也可以把apk后缀改成zip来解压,推荐用apktool,后面重新打包也要用它。需要下载 apktool.bat 和 apktool.jar,将它们放在同目录下。要把下载好 apktool 的jar包改成没有版本号的名称:apktool.jar

 apktool的内容如下:

@echo off
setlocal
set BASENAME=apktool_
chcp 65001 2>nul >nul

set java_exe=java.exe

if defined JAVA_HOME (
set "java_exe=%JAVA_HOME%\bin\java.exe"
)

rem Find the highest version .jar available in the same directory as the script
setlocal EnableDelayedExpansion
pushd "%~dp0"
if exist apktool.jar (
    set BASENAME=apktool
    goto skipversioned
)
set max=0
for /f "tokens=1* delims=-_.0" %%A in ('dir /b /a-d %BASENAME%*.jar') do if %%~B gtr !max! set max=%%~nB
:skipversioned
popd
setlocal DisableDelayedExpansion

rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack
if "%~1"=="" goto load
if not "%~2"=="" goto load
set ATTR=%~a1
if "%ATTR:~0,1%"=="d" (
    rem Directory, rebuild
    set fastCommand=b
)
if "%ATTR:~0,1%"=="-" if "%~x1"==".apk" (
    rem APK file, unpack
    set fastCommand=d
)

:load
"%java_exe%" -jar -Xmx1024M -Duser.language=en -Dfile.encoding=UTF8 -Djdk.util.zip.disableZip64ExtraFieldValidation=true -Djdk.nio.zipfs.allowDotZipEntry=true "%~dp0%BASENAME%%max%.jar" %fastCommand% %*

rem Pause when ran non interactively
for %%i in (%cmdcmdline%) do if /i "%%~i"=="/c" pause & exit /b

 使用 apktool 进行解压

apktool d 要解压的apk名称
(2)使用IL2CppDumper反编译

        打开 il2cppDumper.exe,选择解包后的包中的 ibil2cpp.so 和 global-metadata.dat 文件,就会开始反编译了。也可以用目录来指定输出目录,默认是 il2cppDumper 的目录。

Il2CppDumper.exe libil2cpp.so文件路径 global-metadata.dat文件路径 输出目录路径

完成后会得到这些文件:

在 dump.cs 这个文件会把代码中的类、方法、字段列出来;il2cpp.h 是生成的cpp的头文件,从头文件里我们也可以看到相关的数据结构;script.json 以json格式显示类的方法信息;string.json 以json的格式显示所有的字符串信息;DummyDLL 里可以看到很多dll,其中就有Assembly-CSharp.dll,我们可以使用ILSpy或DNSpy对其进行反编译。此时得到的只是方法名、字段名等,还没有得到代码的内部逻辑。

(3)使用 IDA 获得代码的内部逻辑

        IDA安装:当下防盗链默认文件!当下软件园 www.downxia.com

        安装后根据 ibil2cpp.so 的位数来使用 ida 对应的32位exe后64位exe来打开 ibil2cpp.so,并耐心等待它的解析。解析完成后,此时看到的代码很难看懂,需要先转换为伪代码。

        首先在之前生成的 dump.cs 文件中检索你想要研究的函数或字段的名称,然后根据检索到的内容上方的地址(有RVA,Offset,VA 三个值,使用RVA的就行)到 ida 中按G,输入地址即可跳转到对应代码位置。

        按f5可以看到伪代码,通过研究伪代码找到想要修改的数据,用鼠标选择这个数据,可以在当前伪代码窗口下面(红色矩形里的,此时选中的1)看到对应的数据地址,通过这个地址返回之前的代码窗口,按G继续定位到数据的位置;同样用鼠标选中(就是红色矩形#1那里)想修改的数据,跳转到 Hex 窗口查看对应的16进制表示的值,复制那行;然后用能查看16进制的文本编辑器打开 ibil2cpp.so,查找到刚刚复制的内容(注意要看前面地址是否对应)并进行修改(把1改为0),最后也可以重新去看看 ida 的伪代码是否改变了。

        

 

 

ida 详细使用方法可以参考:【教程】使用 IDA Pro + 010 Editor 反编译和修改 so 文件,让你轻松玩转逆向工程!-阿里云开发者社区 (aliyun.com)

 (4)重新打包和签名

        修改好 ibil2cpp.so 后,就可以重新打包了。apksignertools 详细使用教程和安装:【精选】Android 新版v2签名&渠道包工具_android v2签名 推广码-CSDN博客

% 打包 %
apktool b 包的路径 -o apk路径

% 生成秘钥,使用java自带的工具,密码可以都设置为123456,组织名、地区名等随意,国家名为“CN” %
keytool -genkeypair -alias roland.keystore -keyalg RSA -validity 500000 -keystore roland.keystore

% zipalign对齐,解决多渠道写入问题 %
zipalign -v 4 需要签名的apk路径 对齐后的apk生成路径

% V1签名,使用java自带的工具 %
jarsigner -verbose -keystore roland.keystore -signedjar 签名后的apk名称 要签名的apk名称 roland.keystore

% V1 & V2签名 %
java -jar apksigner.jar sign  --ks 你的密钥  --ks-key-alias 别名  --ks-pass pass:密钥密码  --key-pass pass:别名密码  --out 签名后的apk路径  待签名的apk   

% 检测签名状态 %
java -jar apksigner.jar verify -v my.apk
4、补充

如果按 F5 没反应,需要先右键点击 代码 ,再点击 创建函数,此时再按 F5 就可以看到伪代码了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1172341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChinaSoft 论坛巡礼 | CCF-华为胡杨林基金-系统软件专项(海报)论坛

2023年CCF中国软件大会(CCF ChinaSoft 2023)由CCF主办,CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办,将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

[PHP]魔众文档管理系统 v4.3.0

魔众文档管理支持Markdown、图表、脑图、富文本,功能全面、安全稳定,支持标签、分类,可以更好的在线管理个人文档。 魔众文档管理系统发布v4.3.0版本,新功能和Bug修复累计8项,新增未分类无标签等特性,系统…

03 矩阵与线性变换

矩阵与线性变换 线性变换如何用数值描述线性变换特殊的线性变换反过来看总结 这是关于3Blue1Brown "线性代数的本质"的学习笔记。 线性变换 如果一个变换具有以下两个性质,我们就称它是线性的: 一是直线在变换后仍然保持为直线二是原点必须…

代码随想录训练营第60天 | 503.下一个更大元素II ● 42. 接雨水● 84.柱状图中的最大矩形

503.下一个更大元素II 题目链接:https://leetcode.com/problems/next-greater-element-ii/ 解法: 由于是循环数组,可以直接把两个数组拼接在一起,然后使用单调栈求下一个最大值。 写法上,可以巧妙一些&#xff0c…

Windows10文件夹加备注

要给文件夹设置备注,首先要简单了解下desktop.ini这个文件。 .ini文件类型:配置设置 在Windows系统中,desktop.ini文件是一个隐藏的受保护的操作系统文件,它是Windows文件夹自定义的一部分,用于记录文件夹的外观和行为…

【HMS Core】机器学习服务热门问题合集

【关键词】 机器学习服务、文本识别、身份证识别 【问题描述1】 机器学习服务的文本识别能力,是否支持草书等? 【解决方案】 草书是不支持的,目前建议使用较为规范的字体测试。 【问题描述2】 机器学习服务是否支持训练模型?…

人们常常下定决心“不改变”

"因为我的性格很悲观" 有的人会觉得一些事情发生,是自己性格使然,改变不了。 但其实性格是可以改变的。 这听起来似乎不太现实,自己的性格就是这样,怎么会改变? 那换种表达,我们看待世界的方式可…

向量数据库的崛起与多元化场景创新

向量数据库的崛起与多元化场景创新 前言: 在当今数字化时代,数据被认为是黄金,对于企业、科学家和决策者而言都具有巨大的价值。然而,随着数据规模的不断增长,有效地管理、存储和检索数据变得愈发复杂。这就引入了向量…

R语言_RColorBrewer包--全平台可用

R语言_RColorBrewer包–全平台可用

基于nodejs+vue畅听校园点歌系统的设计与实现

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

五、 栈和队列

一、栈和队列的定义 栈是先进后出&#xff0c;队列是先进先出 栈的相关操作&#xff1a; stack<Type> stack_name; .push(element) 压入栈顶 .pop() 弹出栈顶 .top() 返回栈顶元素的引用 .empty() 栈为空返回true&#xff0c;否则返回false队列的相关操作&#xff1a;…

2023辽宁省数学建模B题数据驱动的水下导航适配区分类预测完整原创论文分享(python求解)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了辽宁省数学建模B题完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 B用Python&#xff0b;SPSSPRO求解&…

尚硅谷Docker基础篇和Dockerfile超详细整合笔记

Docker基础篇DockerFile Docker&#xff1a;您要如何确保应用能够在这些环境中运行和通过质量检测&#xff1f;并且在部署过程中不出现令人头疼的版本、配置问题&#xff0c;也无需重新编写代码和进行故障修复&#xff1f;而这个就是使用容器。Docker解决了运行环境和配置问题…

程序包com.sun.deploy.net不存在的解决方法

使用package打包程序时&#xff0c;跳出这样的一个错误&#xff1a; 对应报错信息&#xff1a; 找到该目标文件内容&#xff0c;找到com.sun.deploy.net这个包&#xff1a; 删除这一行即可&#xff01;&#xff01; 运行正确。

基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)

目录 1 主要内容 白鲸优化算法BWO 变分模态分解VMD 核极限学习机KELM 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序采用白鲸优化算法变分模态分解核极限学习机三种方法组合对短期光伏功率进行预测&#xff0c;当然&#xff0c;该方法同样适用于风电、负荷等方面…

C语言之动态内存管理实现通讯录(完整版)

我们在之前的博客中写过静态版的通讯录&#xff0c;我们今天来写一个动态版的&#xff0c;不需要规定它到底需要多大空间&#xff0c;只要还有内存&#xff0c;我们都可以存放的下&#xff01;同时&#xff0c;函数实现原理&#xff0c;我在通讯录静态版的博客里做了详细的讲解…

虚拟机VirtualBox添加磁盘

一、创建虚拟硬盘 fdisk -l 我们新添加的磁盘/dev/sdb&#xff0c;还没有分区 sdb磁盘分区 fdisk /dev/sdb n 创建一个新分区 选择p添加主分区 我们把所有10GB空间都格式化为一个分区了 。 w 键入w&#xff0c;保存设置并退出&#x…

【Python基础】Python编程入门自学笔记,基础大全,一篇到底!

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

freertos静态创建任务

在开始前先有个小插曲&#xff0c;我的keil的自动补全代码功能使用不了&#xff0c;经过查找是因为之前装51把有的文件覆盖了&#xff0c;照这篇博客就可以解决。 然后之前那份代码我们是动态创建任务&#xff0c;先来说一下动态创建任务和静态创建任务的区别&#xff1a; Fre…

奇元大模型通过备案 360自研两大模型均获批

11月4日&#xff0c;三六零(601360.SH&#xff0c;下称“360”)大模型“奇元大模型”通过备案落地。今年9月&#xff0c;“360智脑大模型”已获批面向公众开放。360公司也成为国内首家两个大模型均通过备案的科技企业。 从大模型定位和应用角度来看&#xff0c;奇元大模型具备…