手游APK文件反编译so文件

该楼层疑似违规已被系统折叠 

我們要做的就是替换它注意是替换不不解压直接替换

找一下你自己要替换进去的图片重命名为

重点来了。首先把你要替换的那一张图片删除掉记住是不解压删除!

然后把你改好名的图片复制进去。

为什么要删除了复制而不直接替换呢?

因为有时候不解压直接替换会失败提示成功,实际上失败

好了,相信你已经替换好了

把刚刚改为zip的压缩包改回apk

改好权限211(第一排勾两个第二排勾1个第三排勾一个)

完荿,你的爱机就全局透明了


通过proguard进行Java代码混淆已经不行了啊求新的靠谱的方法!!有朋友来一起交流也可以。... 通过proguard进行Java代码混淆已经不行了啊。求新的靠谱的方法!!有朋友来一起交流也可以。

APK做的高级加密保护一般的混zhi淆代码和防二次dao打包都不行了。所以我现在都用爱密的保护对DEX、RES、SO库等主要的Android APK文件加密。(而苴还是免费的)


· TA获得超过2.1万个赞

您好您可2113对代码进行加5261密。现在大多数4102APK开发者为了防1653止被反编译so文件都将代码进行了加密。您可以找专业公司一般他们也会同时监控国内众多手机应用市场的动态,最大化保护您的权宜

希望可以帮到您,望采纳电脑管家管镓竭诚为您服务!

更多问题可以登陆管家官方论坛反馈

腾讯电脑管家企业平台:

apk反编译so文件问题是在太严重了,简单的混淆几乎没用啦什麼花指令、改变文件类名等都不太好用,也在惆怅中。怎么办楼上介绍的爱加密貌似不错的样子,不知道有没有用呢

做个加密保护唄。这个行业我也不大懂但是有朋友是做软件开发的,这应该有关联吧我朋友设计的应用程序好像都有用爱加密加个保护,也就没出現什么被破解还是反编译so文件的情况

都希望应用市场的制度可以更加规范点,另外就是要自己在技术上加点力度了也可用第三方服务岼台做个保护啊,圈内的人很多都是用爱加密做的额保护效果还可以

对你这个问题也点个赞,问的太好了这个问题很严重啊,就是俺鈈懂回答你的人都很专业啊,热心人很多嘛我看都推荐爱加密啊,我也支持一下

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜體验。你的手机镜头里或许有别人想知道的答案

从这篇文章开始我们开始我们的破解之路之前的几篇文章中我们是如何讲解怎么加固我们的Apk,防止被别人破解那么现在我们要开始破解我们的Apk,针对于之前的加密方式采用相对应的破解技术,Android中的破解其实大体上可以分为静态分析和动态分析对于这两种方式又可以细分为Java层(smail和dex)和native层(so)。所以我们今天主要來讲解如何通过静态分析来破解我们的apk这篇文章我们会通过破解Java层和native层的例子来讲解。

在开始今天的文章之前我们需要准备点东西,

苐一、首先是基本知识:

2、了解Smail语法和dex文件格式

关于这三个知识点这里就不做详细介绍了,不理解的同学可以自行网上学习有很多资料讲解的。

第二、再者就是几个重要的工具

3、jd-gui:很好的查看jar文件的工具

4、IDA:收费的最全破解利器(分析dex和so都可以)

额外:上面四个工具是最基夲的但是现在网上也有一些更好的工具:JEB,GDA等。但是这些工具就是丰富了上面四个工具所以说我们只要上面的四个工具就足够了。IDA工具峩专门给了一个下载地址其他的工具在我们提供的案例中。

准备工作完了下面就来看一下今天的破解方式介绍:

Android中的破解的静态分析說重要,也不重要为什么这么说呢?

因为我们到后面会介绍动态分析那时候我们在破解一个Apk的时候,发现静态分析的方式几乎毫无用途因为现在的程序加固的越来越高级,静态分析几乎失效所以动态分析是必须的,但是要是说静态分析没有用那么也错了,因为我們在有些场景下只有静态分析能够开始破解之门,没有静态分析之后的结果动态分析是无法开展的。这个下面会举例说明所以说在破解的过程中,静态分析和动态分析一定会结合在一起的只有这样我们才会勇往直前。下面就来看看我们如何通过静态分析来破解apk.

在这個过程中我们会发现有些apk很轻易的被反编译so文件了,但是有些apk每次反编译so文件都会报各种错误这个也是正常的,因为加固了吗现在網上有很多对apk加密的方式,直接让反编译so文件就通不过比如Androidmanifest文件,dex文件等因为apktool他需要解析这些重要的资源,一旦这些文件加密了那么僦会终止所以这里我们暂且都认为apk都能反编译so文件的,因为我们今天是主要介绍怎么通过静态分析来破解关于这里的反编译so文件失败嘚问题,我后面会在用一篇文章详细介绍到时候会列举一些反编译so文件错误的例子。

我们知道一个Android的程序入口信息都会在AndroidManifest.xml中比如Application和入ロActivity,所以我们肯定会先来分析这个文件,找到我们想要的信息当然这里还有一个常用的命令需要记住:

能够获取到当前程序的Activity信息

然后我們会分析smail代码,进行代码逻辑的修改

这里我们主要很容易的查看代码因为我们在第二步中得到了smail源码,就可以分析程序了但是我们知噵虽然smail语法不是很复杂,至少比汇编简单但是怎么看着都是不方便的,还是看java代码比较方便所以我们借助jd-gui工具查看代码逻辑,然后在smail玳码中进行修改即可上面说到的JEB工具,就加强了jd-gui工具的功能它可以直接将smail源码翻译成java代码,这样我们就不需要先用jd-gui工具查看再去smail源碼中修改了,借助JEB即可

4、如果程序中有涉及到native层的话,我们可以用IDA打开指定的so文件我们还是需要先看java代码,找到指定的so文件在用IDA来靜态分析so文件。

上面介绍了静态分析的流程下面来看一下静态分析的几个技术,我们在静态分析破解Apk的时候首先需要找到突破点,找箌关键的类和方法当然这里就需要经验了,不是有方法可循的但是我们会借助一些技术来加快破解。

1、全局查找关键字符串和日志信息

这个技术完全靠眼我们在运行程序之后,会看到程序中出现的字符串比如文本框,按钮上的文本toast显示的信息等,都可能是重要信息然后我们可以在jd-gui工具中全局搜索这个字符串,这样就会很快的定位到我们想要找的逻辑地方:

当然我们还有一个重要点就是Android中的Log信息因为在一个大的项目中,会有多人开发所以每个模块每个人开发,每个人都会调试信息所以就会添加一些log信息,但是不是所有的人嘟会记得在项目发布的时候关闭项目中的所有log信息这个也是我们在项目开发的过程中不好的习惯。这时候我们就可以通过程序运行起来の后会打印一些log信息,那么我们可以通过这些信息获取突破点Android中的log可以根据一个应用来进行过滤的,或者我们可以通过log信息中的字符串在jd-gui中进行全局搜索也是可以的

在第一种方式中我们通过全局搜索一些关键的字符串来找突破点,但是这招有时候不好使所以这时候峩们需要加一些代码了来观察信息了,这里有一个通用的方法就是加入我们自己的log代码来追踪代码的执行逻辑,因为这里讲的是静态分析技术所以就用代码注入技术来跟踪执行逻辑,后面介绍了动态分析技术之后那就简单了,我们可以随意的打断点来进行调试这里嘚添加代码,就是修改smail代码添加我们的日志信息即可,在下面我们会用例子来进行讲解这个也是我们最常用的一种技术。

3、使用系统嘚Hook技术注入破解程序进程,获取关键方法的执行逻辑

关于Android中的进程注入和Hook技术这里就不做详细介绍了,不了解这些技术的同学可以转戰:

这两篇文章介绍了这两项技术但是我们在实际操作过程中不用这两篇文章中用到的方式,因为这两篇文章只是介绍原理技术还不昰很成熟,关于这两个技术网上有两个框架很成熟,也很实用就是人们熟知的:Cydia和Xposed,关于这两个框架的话,网上的资料太多了而且用起来也很容易,这里就不做太多的详细介绍了

我们在实际的破解的过程中,这种方式用的有点少因为这种方式效率有点低,所以只有茬特定的场景下会使用

4、使用IDA来静态分析so文件

这里终于用到了IDA工具了,本人是感觉这个工具太强大了他可以查看so中的代码逻辑,我们看到的的可能是汇编指令所以这里就有一个问题了,破解so的时候我们还必须掌握一项技能,就是能看懂汇编指令不然用IDA来破解程序,会很费经的关于汇编指令,大学的时候我们接触过了,但是我们当时感觉这东西又难而且用的地方也很少,所以就没太在意其實不然呀,真正懂汇编的人才是好的程序员:

看到些汇编指令头立马就大了,不过这个用多了破解多了,还是可以的我们可以看到咗边栏中有我们的函数,我们可以找到指定函数的定义的地方进行查看即可其实IDA最强大的地方是在于他动态调试so文件,下一篇文章会介紹怎么动态调试so文件当然IDA可也是可以直接查看apk文件的:

可以查看apk文件中的所有文件,我们可以选择classes.dex文件:

但是这里我们可能会遇到一个問题就是如果应用程序太大的话,这个打开的过程中会很慢的有可能IDA停止工作,所以要慢慢等啦:

打开之后我们可以看到我们的类囷方法名,这里还可以支持搜索类名和方法名Ctrl+F也可以查看字符串内容(Shirt+F12):

我们发现IDA也是一个分析Java代码的好手,所以说这个工具太强大了啦啦~~

仩面讲解了静态分析的破解技术那么下面就开始使用一个例子来看看静态分析的技术。

首先我们拿到我们需要破解的Apk,使用apktool.jar工具来反编译so攵件:

这个apk很是容易就被反编译so文件了看来并没有进行任何的加固。那就好办了我们这里来改一下他的AndroidManifest.xml中的信息,改成可调式模式這个是我们后面进行动态调试的前提,一个正式的apk在AndroidManifest.xml中这个值是false的。

我们把这个值改成true.在回编译这时候我们就可以动态调试这个apk了,所以在这点上我们可以看到静态分析是动态分析的前提,这个值不修改的话我们是办法进行后续的动态调试的。

修改成功之后我们進行回编译:

这里是为了简单,写了一个批处理首先进入到目录,然后使用命令进行回编译:

sq是之前反编译so文件的目录debug.apk是回编译之后嘚文件

这时候,debug.apk是不能安装运行的因为没有签名,Android中是不允许安装一个没有签名的apk

下面还要继续签名我们用系统自带的签名文件即可簽名:

注:其实我们在用IDE工具开发android项目的时候,工具就是用这个签名文件进行签名的只是这个过程IDE帮我们做了。

后面就是直接安装这个apk,嘫后运行这个Apk这个过程中我们只需要知道应用的包名和入口Activity名称即可,这个信息我们在AndroidManifest.xml中也是可以获取到的当然我们用:adb shell dumpsys activity top 命令也可以嘚到:

回编译之后,我们运行程序发现有问题,就是点击程序的icon没反应,运行不起来我们在查看log中的异常信息,发现也没有抛出任哬异常那么这时候,我们就判断他内部肯定做了什么校验工作,这个一般回编译之后的程序运行不起来的话那就是内部做校验了,┅般做校验的话有两种:

1、对dex做校验,防止修改dex的

2、对apk的签名做校验防止重新打包

那我们就需要从新看看他的代码,来看看是不是做叻校验:

这里我们看到他的代码做混淆了但是一些系统回调方法肯定不能混淆的,比如onCreate方法但是这里我们一般找的方法是:

1、首先看這个类有没有静态方法和静态代码块,因为这类的代码会在对象初始化之前运行可能在这里加载so文件,或者是加密校验等操作

2、再看看這个类的构造方法

3、最后再看生命周期方法

我们这里看到他的核心代码在onCreate中调用了很多类的方法,猜想这里的某个方法做工作了

这时候我们就来注入我们的代码来跟踪是哪个方法出现问题了,这里有的同学有疑问其实就这几个方法,直接一个一个看不就结了哎,我們这篇文章就是要介绍静态分析技术当然就需要做案例啦。

下面来看看我们怎么添加我们的日志信息其实很简单,就是添加日志需偠修改smail文件,我们在去查看smail源码:

关于smail语法本人认为不是很难,所以大家自己网上去搜一些资料学习一下即可这里我们可以很清晰的看到调用了这些方法,那么我们就在每个方法加上我们的日志信息这里加日志有两种方式,一种就是直接在这里调用系统的log方法但是囿两个问题:

1、需要导入包,在smail中修改

2、需要定义一个两个参数一个是tag,msg,才能正常的打印log出来

明显这个方法有点麻烦,这里我们就自己定義一个MyLog类然后反编译so文件,得到MyLog的smail文件添加到这个ShuqiApplication.smail的root目录下,然后在代码中直接调用即可至于为何要放到root目录下,这样在代码中调鼡就不需要导入包了比如SuqiApplication.smail中的一些静态方法调用:

编写日志类MyLog,这里就不粘贴代码了我们新建一个项目之后,反编译so文件得到MyLog.smail文件放到目录中:

我们得到这个文件的时候,一定要注意把MyLog.smail的包名信息删除,因为我们放到root目录下的意味着这个MyLog类是没有任何包名的,这個需要注意不然最后加的话,也是报错的

但是我们在加代码的时候,需要注意的是要找对地方加,所谓找对地方就是在上个方法調用完之后添加,比如:

加好了我们的日志代码之后下面我们就回编译执行,在这个过程可能会遇到samil语法错误这个就对应指定的文件修改就可以了,我们得到回编译的apk之后可以在反编译so文件一下,看看他的java代码:

我们看到了我们添加的代码,在每个方法之后打印信息

看到我们打印的日志了,我们发现打印了三个log,这里需要注意的是这里虽然打印了三个log,但是都是在不同的进程中,所以说一个进程中嘚log的话只打印了一个,所以我们判断问题出现在vr.h这个方法

我们查看这个方法源码:

果然,这个方法做了签名验证不正确的话,直接退出程序那么我们现在要想正常的运行程序的话,很简单了直接注释这行代码:vr.h(this)

然后回编译,在运行果然不报错了,这里就不在演礻了:

好了上面就通过注入代码,来跟踪问题这个方法是很常用,也是很实在的

第二、静态分析Native代码

下面继续来介绍一下,如何使鼡IDA来静态分析native代码这里一定要熟悉汇编指令,不然看起来很费劲的

我们在反编译so文件之后,看到他的onCreate方法中有一个加载so的代码


我们看看这个函数的实现我们一般直接看BL/BLX等信息,跳转逻辑还有就是返回值,我们在函数的最后部分发现一个重点,就是:BL __android_log_print  这个是在native层调鼡log的函数我们在往上看,发现:tag是System.out.c

我们运行程序看起log看看但是我们此时也可以在java层添加日志的:我们全局搜索这个方法,在yi这个类中調用的

回编译在运行程序,开启log:

发现返回的密码java层和native层是一样的。说明我们静态分析native还是有效的

好了,到这里我们今天的内容就介绍完了当然还有很多静态分析apk的方法,这里只是介绍了本人用到的技术

案例中有个说明文件,运行前请阅读~~

1、如何搞定apktool工具反编译so攵件出错的问题

这个我在开始的时候也说了这里出错的原因大部分是apk进行加固了,所以后面我会专门介绍一下如何解决这样的问题

2、如哬搞定让一个Apk可以调试

我们在上面看到一个apk想要能调试的话需要修改android:debug的值,但是有时候我们会遇到修改失败,导致程序不能运行后媔会专门介绍有几种方式来让一个发布后的apk可以调试

这篇文章我们介绍了如何使用静态方式去破解一个apk,我们在破解一个apk的时候,其实就是妀点代码然后能够运行起来,达到我们想要的功能一般就是:

1、注释特定功能,比如广告展示等

2、得到方法的返回值比如获取用户嘚密码

3、添加我们的代码,比如加入我们自己的监测代码和广告等

我们在静态分析代码的时候需要遵循的大体路线:

1、首先能够反编译so攵件,得到AndroidManifest.xml文件找到程序入口代码

2、找到我们想要的代码逻辑,一般会结合界面分析比如我们想得让用户登录成功,我们肯定想要得箌用户登录界面Activity,这时候我们可以用adb shell dumpsys activity top命令得到Activity名称然后用Eclipse自带的程序当前视图分析工具:得到控件名称,或者是在代码中获取layout布局文件┅般是setContentView方法的调用地方,然后用布局文件结合代码得到用户登录的逻辑进行修改

3、在关键的地方通过代码注入技术来跟踪代码执行逻辑

4、注意方法的返回值,条件判断等比较显眼的代码

5、对于有些apk中的源码可能他有自己的加密算法,这时候我们需要获取到这个加密方法如果加密方法比较复杂的话,我们就需要大批的测试数据来获取这个加密方法的逻辑一般是输入和输出作为一个测试用例,比如阿里咹全第一届比赛的第一题就可以用静态分析的方式破解它内部就是一个加密算法,我们需要用测试数据来破解

6、对于那些System.loadLibrary加载so文件的玳码,我们只需要找到这个so文件然后用IDA打开进行静态分析,因为有些apk中把加密算法放到了so中了这时候我们也可以通过测试数据来获取加密算法。

7、通过上面的例子我们可以总结一个方式,就是现在很多apk会做一些校验工作一般在代码中包含:“signature”字符串信息,所以我們可以全局搜索一下也许可以获取一些重要信息。

这篇文章总算是讲解完了其实早就想用写破解的文章了,因为破解比加固有意思臸少破解成功了有成就感。这篇文章主要介绍了如何通过静态分析方式破解介绍了一些工具的时候,破解流程和破解技巧最常用的就昰代码注入技术和全局搜索关键字符串等方式,但是我们可以看到现在市面上的很多apk,光通过静态分析是无法满足我们的破解需求了所以动态分析方式就来了,而且动态方式破解难度会很大需要掌握的东西也很多,我后面会分几篇文章来一一介绍动态破解的技巧和常見的问题但是静态方式破解也是很重要的。当然也是动态分析的前提所以我们既然玩破解,那么这两种技术都必须很好的掌握

我要回帖

更多关于 反编译so文件 的文章

 

随机推荐