吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2539|回复: 8
收起左侧

[Android CTF] 拒绝Smali语法,使用java代码修改并重签名安装“春节解题领红包之3”程序

[复制链接]
11649827 发表于 2023-2-8 01:12
本帖最后由 11649827 于 2023-2-9 17:16 编辑

提前声明一点:这里只是分享一下解题的实际操作过程,以便大佬们看到了帮忙解决一下存在的问题。这里用到了AndroidStudio软件和一些辅助软件,其实这个红包程序不进行修改也能得到正确结果,直接修改smali代码也更快捷,我这用很古板的方法,主要是需要使用Smali语法,不是最佳的做法,仅仅提出这个思路。
下面开始阐述这个过程:
  • 用压缩软件打开apk文件,复制出安装包中的classes.dex文件(打不开apk文件可以修改.apk为.zip)。

将dex从安装包中提取出来

将dex从安装包中提取出来

  • 将dex文件转换为jar文件,这里需要使用到d2j-dex2jar这个工具,工具的下载可以在互联网上查找,将dex文件拖到工具上即可完成转换得到classes-dex2jar.jar文件。这一步如果有提示报错,无法完成转换,通常是java代码中的false和0的问题,在互联网上也有解决方法,或者重新编译工具。
将dex转换为jar.png
  • 使用recaf工具或者其他工具编辑jar文件,删除其中的android依赖和com.google包(goolgle包需要用压缩包软件拆包删除),这步的目的是避免在项目中由于存在两份相同的依赖,软件后续无法完成编译的操作,按保存,之后点击导出程序,保存这个新的jar文件。

移除依赖包

移除依赖包

  • 打开AndroidStudio,新建空白安卓项目,修改保存路径,点击完成创建。

创建空白项目

创建空白项目

修改保存路径

修改保存路径

  • 将左上角的Android改为项目,并展开到项目下的的libs文件夹中,将修改后的jar包拖入其中。之后右键jar包,选择Add as Library...,并选择创建库到main中。
Android改为项目.png 保存到main.png
  • 之后可以在lib目录下展开jar包,查看里面的class文件,这就是java源代码生成的文件,可以看到java源代码。
  • 找到MainActivity.class和MainActivity$$ExternalSyntheticLambda0.class,带$$符号的是子类,点击反编译为java代码。
  • 这时如果想要修改MainActivity的代码,就需要将这个类和它的子类代码的包在src的main中进行创建“com.zj.wuaipojie2023_3”.
新建软件包.png
  • 新建同名MainActivity的.java文件和同名子文件,之后将反编译的源代码(里面包含了MainActivity和子类的代码,需要将子类的代码放入子类的同名.java文件中),如果出现androidx报错,那么就是前面未删除安卓依赖库。
新建java源代码文件.png

未修改jar包的问题

未修改jar包的问题

  • 使用代码提示,修复代码中的错误,完成前期的准备。
  • 修改代码的逻辑,保存项目选择已修改的源文件点击编译,然后等待编译成功。
修改代码逻辑.png
  • 编译后的class文件在\build\intermediates\javac\debug\classes\com\zj\wuaipojie2023_3目录,压缩包软件打开原未作修改的classes-dex2jar.jar,然后将编译后的class文件替换进去。
  • 将替换过class文件的jar文件转换为dex文件,这里需要使用到d2j-jar2dex这个工具,之后将生成的classes-dex2jar-jar2dex.dex修改文件名为classes.dex,替换掉原包,签名安装。
jar转换为dex.png
  • 最后打开修改后的软件,听到一声只因,获得flag{},到这就已经完成了整个过程。
这种方法最后有一个重要的问题没有解决,就是不清楚如何动态调试修改的java源代码(不是调试smali代码,看不懂smali代码),有人清楚的可以指导一下如何实现。

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zzhd 发表于 2023-2-8 19:21
感谢分享
yippee 发表于 2023-2-8 20:08
 楼主| 11649827 发表于 2023-2-10 14:17
对于有验证包签名的应用,也同上面一样先行修改对应的验证类,然后再进行后续操作,例如“春节解题领红包之4”,修改后既可以正常安装运行。
正己 发表于 2023-2-15 18:03
你就直接把关键的凯撒那块扣出来,然后直接用as自带的调试工具就可以了
 楼主| 11649827 发表于 2023-2-15 22:44
正己 发表于 2023-2-15 18:03
你就直接把关键的凯撒那块扣出来,然后直接用as自带的调试工具就可以了

没听懂怎么操作,现在是假设类依赖了很多其他类,然后将一个类的源码进行替换,这样生成的.class文件可以用来替换掉jar中对应的文件,但调试工具并不能调试这源代码,因为项目的代码是一个空包,只是借用这个项目生成的文件,所以不能直接调试这个项目的包,调试的话啥都没有,而原包是需要手动替换了对应代码才能运行,这好像as并没有这种替换工具。

点评

你就idea写个main方法,甚至不需要as,然后把反编译后的java代码复制到main里,看缺什么就补什么,然后直接动态调试  详情 回复 发表于 2023-2-16 13:11
正己 发表于 2023-2-16 13:11
11649827 发表于 2023-2-15 22:44
没听懂怎么操作,现在是假设类依赖了很多其他类,然后将一个类的源码进行替换,这样生成的.class文件可以 ...

你就idea写个main方法,甚至不需要as,然后把反编译后的java代码复制到main里,看缺什么就补什么,然后直接动态调试
 楼主| 11649827 发表于 2023-2-16 13:58
正己 发表于 2023-2-16 13:11
你就idea写个main方法,甚至不需要as,然后把反编译后的java代码复制到main里,看缺什么就补什么,然后直 ...

额,想法不同,我想表达的是一种方法,这不局限于破解软件密码之类的,而是通过破解替换jar,让原来不能运行的软件可以运行起来,或者达到修改版的效果。
例如:现在有一款类似植物大战僵尸的小游戏,在游玩前需要点击广告来游玩,现在可以用java修改它的代码去除广告,然后我想要自己定制关卡和地图,假如有50关,我想要添加51、52关,地图的大小变小,河道放两边,同时僵尸仅在这几关开启快走模式,移动速度增加。
这按照开发流程来说,需要大量改动或添加游戏逻辑,就需要有源代码,光是简单破解和修改是没法达到的,在这样的情况下能用java代码编辑软件是很好的方法。

点评

https://github.com/Efaker/FakerAndroid 这个可以试看看  详情 回复 发表于 2023-2-16 16:21
正己 发表于 2023-2-16 16:21
11649827 发表于 2023-2-16 13:58
额,想法不同,我想表达的是一种方法,这不局限于破解软件密码之类的,而是通过破解替换jar,让原来不能 ...

https://github.com/Efaker/FakerAndroid
这个可以试看看
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 08:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表