导航:首页 > 源码编译 > 手机脚本反编译

手机脚本反编译

发布时间:2024-12-24 13:55:07

❶ 安卓app360加固怎么反编译

1 对比

上传demo进行加固,解包后对比下原包和加固包,发现加固包在assets文件夹下多了libjiagu.so,libjiagu_x86,lib文件夹下多了libjiagu_art.so,同时修改了dex文件和androidManifest文件

打开manifest文件,看到xxx加固对Application标签做了修改,添加了壳入口,也就是我们反编译后看到的StubApplication.smali这个文件。

相比于之前版本的加固,自从1.x.x.x加固版本之后,多了几次反调试,使得动态难度稍微增大了一些,不过针对脱壳机脱壳,再多了反调试也是无用。或者通过修改系统源码,也能达到消除反调试的作用。


2 动态调试

(1)把app安装到手机,以调试模式打开app

(2)以shell模式root权限打开IDA的android_server监听

(3)tcp转发

(4)打开IDA,修改配置为在进程开始时下断

(5)搜索到进程后jdwp转发,pid值即为我们进程号,并在命令行下附加。

成功附加后,可以下段了,打开Debugger Option

我们选择在线程开始和库加载时下断,修改成功后,jdb附加,点击运行

程序会断在elf头处,按下G键,搜索mmap,在mmap函数的段首和断尾下段

F9运行,来到断尾时F8单步,

来到此处时,在 BLunk_5C999C2C下断,F9一下,F7跟进去

跟进去今后在BLX LR处进行下断,此处就是进行反调试的地方,原理依然是获取TracePid的值判断当前是不是处于调试状态,建议第一次调试的人在fgets和fopen处下断,再f7跟进此调用就可以看到TracePid的值了。

跟进去之后,我们直接把方法移到最下方,就可以看到kill符号了,这就是杀进程的地方,如果当前处于调试状态,则直接结束进程。

我们在此函数的所有cmpR0,#0处下断,F9一下后即断在断点处,观察寄存器窗口的R0值,实质就是当前的TracePid的16进制的值

不确定的可以使用cat /proc/pid/status进行对比一下,我们直接把R0置0,右键选择Zero Value即可清0,继续F9

我们看到程序又来到了mmap处,继续f9

当继续断在调用反调试功能的方法时,继续F7跟进,依然在所有的cmp R0,#0处下断,断下后把R0清0后继续F9运行

目前的规律是,调用BLXLR的第一次,第二次和第四次是进行反调试判断的,第三次并不影响,可以直接f9跳过去,三次反调试搞定后,就可以愉快的F9运行并观察堆栈窗口了

当看到出现如下所示时:

说明壳已经开始解密并释放dex文件了,我们直接F8单步十几步,最后F9一下就可以看到我们需要的dex头了

直接脚本mp出来即可,最后把libjiagu的所有文件删除,并修复下Application标,如果存在则修复,不存在删除即可

❷ Android反编译(三)— 手动编译

PS: 最近没工作,没工作就没需求,没需求就没什么技术总结的灵感,那就没更新什么。但是两个月不更新了,要是三个月不更新就会出大事,所以这次打算做一件有意思又不难的事。
之前有发文章写过反编译,今天就来试试反编译之正编译,开玩笑的,就是试试手动编译的过程, 平时我们在项目中编译出包都是使用Gradle直接执行assemble任务就能解决,我打算试试手动模拟整个过程。当然我也是第一次这样搞,所以如果有写得不对的地方,还望指出。

众所周知,apk实质上就是一个压缩包。复习一下,我们写个最简单的Demo,然后打包,然解压,注意是解压,不是反编译,意义是不同的。

注意我这个Demo很简单,什么都不引入

然后我们看看整个出包的过程,随便从网上拿张图

然后这里我们用Android SDK给我们提供的工具来完成整个流程,工具在sdk文件夹下的build-tools文件夹下,有什么aapt.exe、dx.bat,用的就是这些

这步应该是整个流程最简单的吧,我感觉,所以从最简单的开始。
我们先看看生成的dex有什么

对比项目,我是一开始最基本的项目,什么都没动,所以只有一个MainActivity.clas,所以这里肯定是要先想办法得到BuildConfig.class和R.class。

输入命令:
aapt p -f -m -J <输出路径> -S <res路径> -I <android.jar路径> -M <Manifest路径>

下一步,我们需要BuildConfig.class
这个BuildConfig.java是由gradle在我们配置好gradle之后自己帮我们生成的,所以我们直接拿来用,然后再javac就得到class文件了

然后我们再编译我们的MainActivity.java并将它们放到同一个文件夹下, MainActivity因为引用了Android.jar和R文件,所以编译时注意点,我为此被动好好的复习了一遍javac,都是泪

最后一步,我们用dx工具就能打出dex文件了

然后执行命令就得到一个Dex文件,看看这个文件里面和上面直接打出的apk中的Dex文件有什么不同:

看图,我们上一步已经生成.dex了,那么我们需要和compiled Resource 还有 Other Resource 一起生成APK。

我们先来生成compiled Resource,也就是resources.arsc
发现之前使用aapt生成R文件的时候没写完整,当时可以加一个-F参数直接生成arsc和Manifest

导出的abc.zip里面就有resources.arsc和AndroidManifest.xml。
因为之前写漏了,所以肯定要重新编一次MainActivity.java和Dex

我们把刚才的dex文件和aapt生成的resources.arsc、AndroidManifest.xml和res放到一个文件夹里面。
PS:res文件夹也是上面aapt的命令生成的
然后我们对比这个文件夹和之前apk解压的文件夹

最后运行

看来是成功了。

再说说遇到的还有两个问题,并说下我解决问题的思路
(1)我把它们都放到一个文件夹之后,我压缩成压缩包,然后改后缀成.apk,然后发现安装不了,我就直接反编译,发现发编译失败,提示包有问题,以我多点玩包的经验,我感觉就是压缩工具出了问题,然后我去下个“好压”(这不是广告啊),然后就能正常反编译了。
(2)但是还是安装不了,再根据我多年的玩包经验,我感觉是签名问题,然后我随便给这个包上一个签名,就能正常安装得到上图的结果了。

总体来说,还真挺好玩的,这整个过程,就是翻车了几次。做完之后感觉非常牛逼,为什么这样说,因为我知道这整个过程,我就可以做到,我不经过gradle来打包,我自己写个python脚本来调用aapt和dx来打包也是能做到的。
当然上面纯属异想天开,因为这是个什么都没有的Demo所以觉得简单,要是一个真实的项目,我感觉肯定要有很多坑,别的先不说,一个项目那么多依赖关系,我这javac要搞死人。
最后如果有不对的地方,希望有大佬能够指出,毕竟能运行也不能证明完全没问题。然后我使用的build-tools是28的,不敢保证其它版本包括以后版本的玩法都一样。

❸ 如何实现APK的反编译得到APK的源码

最新的反编译不用此方法, 有最新的一键自动反编译工具:

这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。

在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。

注:本Android反编译教程,在Windows7-Ultimate-64bit操作系统上,测试通过!

下述所需的反编译工具包 下载

一、反编译Apk得到Java源代码
首先要下载两个工具:dex2jar和JD-GUI

前者dex2jar是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址:

dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip

JD-GUI:http://laichao.googlecode.com/files/jdgui.zip

具体步骤:

首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;

解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录(在DOS命令下CD 目录)

运行

dex2jar.bat classes.dex

生成

classes.dex.dex2jar.jar

生成jar文件的截图如下:

运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了

HelloAndroid源码(编译前的apk源码对照)如下:

二、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件

如果是汉化软件,这将特别有用。首先还是下载工具,这次用到的是apktool

下载地址:http://code.google.com/p/android-apktool/downloads/list

下载:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(两个包都下载)

具体步骤:

将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar

在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\*.apk C:\*文件夹,如下图:

命令行解释:apktool d [apk文件 ] [输出文件夹]

反编译的文件如下(AndroidManifest.xml为例):

特别注意:你要反编译的文件一定要放在C盘的根目录里(其实不用放在C盘根目录也行)

例如:在D盘目录D:\apktool1.4.1

cd /d D:\apktool1.4.1 //切换到D盘目录,包含HelloAndroid.apk以及aapt.exe,apktool.bat,apktool.jar三个文件

apktool.bat d -f HelloAndroid.apk HelloAndroid // apktool反编译命令,注意 d和
-f 的写法

将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可,命令如下:这个主意你文件所在盘

打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹:

build

dist

其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok

最后,再介绍一款刚出来的反编译工具 Androidfby ,它是一款对上述步骤进行了封装的图形界面工具,下载地址

但是,针对部分签名的apk,无法实现反编译,但本博客方法则仍然可以反编译成功!仅供参考使用

另外,作为应用开发者,肯定不希望自己的代码被反编译的,下一遍博客将讲述如何通过混淆代码防止被别人反编译

Android如何防止apk程序被反编译

作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。

Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹

proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。

下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windows\tools\lib\proguard.cfg的内容:

[html] view
plainprint?

1. -optimizationpasses 5

2. -dontusemixedcaseclassnames

3. -

4. -dontpreverify

5. -verbose

6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

7.

8. -keep public class * extends android.app.Activity

9. -keep public class * extends android.app.Application

10. -keep public class * extends android.app.Service

11. -keep public class * extends android.content.BroadcastReceiver

12. -keep public class * extends android.content.ContentProvider

13. -keep public class * extends android.app.backup.BackupAgentHelper

14. -keep public class * extends android.preference.Preference

15. -keep public class com.android.vending.licensing.ILicensingService

16.

17. -keepclasseswithmembernames class * {

18. native <methods>;

19. }

20.

21. -keepclasseswithmembernames class * {

22. public <init>(android.content.Context, android.util.AttributeSet);

23. }

24.

25. -keepclasseswithmembernames class * {

26. public <init>(android.content.Context, android.util.AttributeSet, int);

27. }

28.

29. -keepclassmembers enum * {

30. public static **[] values();

31. public static ** valueOf(java.lang.String);

32. }

33.

34. -keep class * implements android.os.Parcelable {

35. public static final android.os.Parcelable$Creator *;

36. }

从脚本中可以看到,混淆中保留了继承自Activity、Service、
Application、BroadcastReceiver、ContentProvider等基本组件以及
com.android.vending.licensing.ILicensingService,

并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。(详细信息请参考<proguard_path>/examples中的例子及注释。)

让proguard.cfg起作用的做法很简单,就是在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了

完整的default.properties文件应该如下:

[html] view
plainprint?

1. # This file is automatically generated by Android Tools.

2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED!

3. #

4. # This file must be checked in Version Control Systems.

5. #

6. # To customize properties used by the Ant build system use,

7. # "build.properties", and override values to adapt the script to your

8. # project structure.

9.

10. # Project target.

11. target=android-9

12. proguard.config=proguard.cfg

大功告成,正常的编译签名后就可以防止代码被反编译了。反编译经过代码混淆的apk得到的代码应该类似于下面的效果,是很难看懂的:

如果您使用的是2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可

❹ 如何写一个脚本,在手机上运行

第一种:破解apk,提取dex,反编译jar,反混淆,浏览几十个class文件寻找接单api,不停查找代码然后自己再用java写一个安卓应用后台运行
第二种:连点器

❺ app可以被反编译到什么程度

Android APK中的Java代码可以被反编译到什么程度主要看APK的加密程度。

第一种情况:无混淆无加密无加壳。
直接利用Dex2jar和JD-GUI可把源码从APK里抠出来,代码逻辑清晰,基本上做到可复用,只是资源文件的引用需要计算一下。

第二种情况:混淆。
通常是利用Proguard做的防护。因为是对jar做的不可逆混淆(除非有mapping),因此不能还原成原来的代码。但是代码结构,代码逻辑一致,只要花长时间对代码进行梳理一样可找准核心代码,解密方法跟第一种一致。

第三种情况:加密。
这里以DexGuard为例。对于这种代码加密的方法,在程序运行中必定会进行解密,只要抽出它解密的逻辑便可。PS:我自己做过DexGuard的解密,如果用Dex2jar反编译看的话逻辑是不对的,一定要从Smali代码看。后来发现网上已经有人做了。
解密的脚本:A look inside Dexguard

第四种情况:加壳。
这种情况跟第三种类似。无论你怎么加壳,运行的时候必定是Dalvik可识别的Odex代码,建议直接在内存里mp出来。这里推荐Xpose的ZjDroid。

加固可以在一定程度上保护自己核心代码算法,提高破解/盗版/二次打包的难度,缓解代码注入/动态调试/内存注入攻击等。
目前市面上有很多第三方加固的平台, 如果新应用发布前需要扫描或者加固的话,可以先试试免费的,例如腾讯御安全,建议自己先去扫描测试下。

❻ 如何防止unity3d代码被反编译

防止Unity3D代码被反编译是手游安全中常见的破解风险。Unity的破解风险主要体现在Unity mono脚本解密、Unity il2cpp脚本解析、Assetbundle资源篡改三项。mono脚本文件的二进制形式及源码转换图示,展示了如何对mono脚本进行解密。Il2cpp脚本解析则需要使用Il2CppDumper工具,解析后能获得类名、函数名以及对应偏移信息。尽管iOS中还无法解析为源码,但Android的有效脚本加密对于防止破解尤为重要。Assetbundle资源篡改,如修改材质属性,可实现透视效果,同时还有资源被竞品盗取、分析的风险。存档数据被修改也是安全问题,如果数据不进行服务端校验或为单机游戏,游戏属性修改风险巨大。保护Unity安全时,自研保护系统面临高成本、兼容性问题、对抗破解的持续升级和第三方服务兼容性挑战。网易云易盾提供了Unity mono DLL脚本加密、IL2CPP加密、Assetbundle加密等解决方案,通过修改或HOOK mono_image_open_from_data_with_name函数,实现对CSharp DLL脚本的加密,以防止其被解密。Unity mono DLL脚本加密经历了从直接文件加密到抹掉PE头、再到方法级加密的三代技术演进。IL2CPP加密则需结合global-metadata.dat文件内的符号信息进行解析,通过SO加壳保护libil2cpp.so来实现。Assetbundle加密后,Unity Studio无法解析资源。网易易盾保护方案特点包括纯Native保护、对引擎SO做加壳、兼容性和稳定性高、性能影响小,支持多平台加固。在选择保护方案时,应考虑DEX加壳的兼容性和安全性问题,而网易易盾提供的纯Native保护方案为手游提供了一种更加安全和兼容性强的解决方案。

阅读全文

与手机脚本反编译相关的资料

热点内容
手机命令怎么打开 浏览:607
phpmysql中文字段 浏览:719
我的世界解压视频第三集 浏览:607
程序员的旅游景点 浏览:310
拳皇命运什么服务器 浏览:689
3级分销系统源码下载 浏览:73
linuxvs2010 浏览:668
linux根目录多大 浏览:877
vi命令行号 浏览:620
h5页面图片压缩 浏览:210
贝叶斯算法程序 浏览:444
万变语音的语音文件夹储存在哪 浏览:29
小米手机装的app哪里显示 浏览:984
androidcpu位数 浏览:830
去哪里举办app 浏览:708
木匠解压器 浏览:365
反诈app在哪里下安全 浏览:745
python判断linux系统 浏览:823
git服务器如何启动 浏览:43
noi算法 浏览:461