反编译app并加入引导页面

反编译别人app,我们需要用到一些反编译工具,我们这里用到三个工具:apktool.jar,apktool.bat 、jd-gui、dex2jar

工具可以再网上下载或者https://pan.baidu.com/s/1htWNrfA   密码:7t2i 下载 

反编译app首先得有目标app,我创建了一个Dome,一个很简单的显示


有了dome,开始反编译

把apk放到和工具一起,免得切换麻烦 ,我这里统一放到d盘下的fby文件夹里面,


dome放在apk文件夹里面,修改apk后缀为zip,然后解压,可以得到apk的资源文件


可以看到里面有一个classes.dex文件,这个文件就是我们需要看apk内部代码的文件了,里面包含了所有的类,其他如res、AndroidManifest等资源文件如果需要可以去查看(如打开AndroidManifest文件乱码或者打不开,没关系,可以利用apktool工具解apk出来的AndroidManifest文件则可以正常浏览

这里并不能看到java文件,我们需要用到另外一个工具:dex2jar

把classes.dex文件拷贝到dex2jar根目录下面,然后cd到dex2jar根目录,执行命令 d2j-dex2jar classes.dex,则可以得到jar文件classes-dex2jar.dar,如图:


得到jar文件,就可以看里面的代码啦,利用工具jd-gui.exe打开jar包,代码显示如下



因为创建dome的时候没注意,创建了一个kotlin的dome,不过问题不大,看代码是一样的,(里面的clearFindViewByIdCache和findCachedViewById方法在真是代码里面是隐藏的),得到了所有的代码,就可以在里面看别人代码的实现啦,(如果对方app混淆了的话,就得仔细排查了)

到这里,我们得到了所有的资源文件和类文件,接下来我们需要用到apktool工具,把apk文件拷贝到该文件的同一个目录下面,如:


cd到该目录下面,执行命令

apktool d test.apk,执行完毕之后,如果不出意外,会得到一个text文件夹,打开文件夹,里面内容如下:

打开AndroidManifest.xml文件,可以看到包名以及之前dome里面第一个启动类,如:


看到上面包名为dome.test,第一个启动类为MainActivity,有了这个,我们就很好办了,开始撸代码

新建一个项目,包名设置和目标app一致,在和启动类同一包中新建一个类,为SActivity,并设置为Main 类,新建布局文件activity_s;如下:



进入app后,经过五秒之后调整到MainActivity界面,我这里只是放了一个简单的图片,如果真正的加入广告页面,可以在这个类里面访问接口显示广告等

代码编写好之后,不能直接把类文件放到目标反编译的文件中,我们知道安卓虚拟机运行需要的不是java文件,而是smail文件,如果直接把类文件放到里面去,肯定是GG的

下一步,把最新编写好的代码打包成一个apk,然后反编译这个apk,就可以得到新写的类的smail文件了,过程和上述一样,使用apktool工具,

我这里给apk取名为test_two.apk,故反编译之后文件夹为test_two文件夹,进入smail这个文件夹,来到包名对应下的文件夹下面,测试包名为dome/test,所有我们也进入到dome/testwen文件夹 ,看到有很多.smail文件,我们新增了一个SActivity类,所以只关注SACtivity相关的,如下:


我们看到有SActivity$****文件的,都是属于SActivity里面内部类的编译文件,一起拷贝到我们目标反编译的smail下面的对应文件夹里面,这里为smail/dome/test

然后把对应资源文件也拷贝到相对应的文件夹里面,

拷贝了文件就可以了吗? no,别忘记了,我们还加入资源图片,xml文件和对应的iD呢,所以还得手动的添加对应的R文件索引值

再次来到目标的反编译之后的文件夹中,可以看到里面有很多R$**.smail文件,首先找到R$layout.smail文件,用文本方式打开,如下:



可以看到里面有很多的值,我们把我们新加的activity_s手动添加进去

.field public static final activity_s:I = 0x7f09003f   (注意值为唯一值,并且0x7f开头,具体资源ID值命名可在网上查阅)

如上,将start图片id已经xml文件里面定义的控件id添加进去

添加好之后还不行,还得需要来到value文件夹里面,找到public.xml文件,文本形式打开,打开之后如下:


可以看到里面定义了对应的类型和值,把刚刚我们添加的布局文件,drawable资源id以及控件id等手动添加进去

  <public type="drawable" name="start" id="0x7f060073" />
  <public type="id" name="image" id="0x7f070090" />
  <public type="id" name="time" id="0x7f070091" />
  <public type="layout" name="activity_s" id="0x7f09003f" />

添加之后并没完,还得改一个地方  来到res文件夹下面的value文件夹,文本形式打开ids.xml文件,看到如下数据


因为我们是自己定义的id,而不是使用系统里面的id,所有我们需要将我们定义的id添加进去,否则app运行的时候,会报找不到id错误:

   <item type="id" name="image">false</item>
    <item type="id" name="time">false</item>

定义id之后,我们再需要到到新增类里面的smail文件里面把原来应用了资源的值替换成我们手动添加的即可,具体值可以参照你反编译自己新建的项目apk里面的值,找到值对应的资源名称,然后在原apk里面找到自己对应的资源名称自定义的值替换即可

到此,资源修改差不多完成了,接着我们修改AndroidManifest.xml文件,修改启动类,然后再声明一个activity用来装载原来的Activity,如下:


到此,所有的文件修改完成,进行二次打包,二次打包过程和反编译目标app差不多,只是命令变成 apktool b 文件夹名字 -o new.apk

我这里为 apktool b test -o new.apk

执行完毕之后,如下


会在文件夹里面出现一个new.apk文件,注意,这个apk是不能安装的,因为还没对其签名,开始签名,把签名文件一起放到这个目录下面 

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名

签名完成之后,可输入一下命令检测是否签名成功 

jarsigner -verify -verbose -certs 签名apk名称


到此,反编译完成  

 有不对之处----望指正

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nibinusm22b

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值