- 浏览: 303685 次
- 性别:
- 来自: 广州
最新评论
-
qipa2015:
hao
Android中自定义SeekBar的背景颜色,进度条颜色,以及滑块的图片 -
chungehenyy:
Android中的JSON详细总结 -
wangys198:
请教下怎么加入一个jar包
说说APK反编译(代码插入)的那点事 -
andy199:
Android的TextView使用Html来处理图片显示、字体样式、超链接等 -
tyjxf:
加载图片是个烦人的事,我也正在困扰中
Android实现ListView异步加载图片
很多人热衷于逆向工程,其过程中既可以学习作者的思路,又可以锻炼自己的能力,可谓是一举多得! 今天我来给大家伙介绍介绍我所了解的apk反编译的相关技术,和大家一起来做一个逆向工程.
提醒:未经授权而逆向别人的程序是违法行为! 在此,我们只做学术研究,不搞破坏~
知识铺垫:
1.反编译的结果有两种,一种是smali (java机器码),还有一种是大家喜闻乐见的java代码形式.
2.apk文件其实是一个zip压缩包,里面的目录结构与android工程的结构很类似,其中我们的java源码(包括R.java)在classes.dex文件中.
3.期间的工具大部分是java写的,运行时需要具备java环境!
我先介绍大家喜闻乐见的形式吧,哈哈…
将apk反编译为源码.
需要的工具:
1.dex2jar. dex2jar-0.0.7.10-SNAPSHOT.zip (590.31 KB, 下载次数: 44)
2.Jd-gui. jd-gui-0.3.3.osx.i686.zip (689.59 KB, 下载次数: 39)
3.AXMLPrinter2. AXMLPrinter2.zip (38.76 KB, 下载次数: 34)
逆向目标是前阵子悬赏区发过的一个demo,正好是我写的,我授权给所有cmd100用户,欢迎逆向,不追任何究法律责任..
源码:http://www.cmd100.com/bbs/forum- ... 052-pid-173308.html
Apk文件: CMD100.demo.slipButton.rar (18.74 KB, 下载次数: 19)
方法:
既然是一个zip压缩包,那就先把apk包解压出来吧!
可以看到解压出来的文件如下:
先处理xml 文件.. 你可能想直接打开xml文件,但其实xml文件被加密过了,打开只会是一堆你读不懂的东西,这需要用工具解码一下, 用到AXMLPrinter2.
打开CMD切换到AXMLPrinter2目录.
命令: Java –jar axmlprinter2.jar [路径]\AndroidManifest.xml >输出文件名.xml
打开生成的这个文件,看看Manifest.xml是不是出来了?
反编译结果: 源文件:
使用同样的方法把res/layout/目录下的布局文件也解码一下~在此我就不再赘述了.
接下来是dex文件的处理,需要用dex2jar工具处理转换一下.
先把工具解压出来,然后CMD切换到指定目录,运行如下命令:
dex2jar.bat [目录]\classes.dex
执行完毕后,classes.dex所在目录下便生成了一个名为classes.dex.dex2jar.jar的文件!
用jd-gui打开这个生成的jar试试!代码就在里面了有没有?!
对比一下main.java吧.
反编译: 源文件:
P.S.其实这样获得的源码还是有一部分会出现错误啊~
=================分割线========================
将apk反编译为smali并插入自己的代码
用到的工具:
1.apktool.jar (或smali-1.2.6.jar & baksmali-1.2.6.jar) Apktool.zip (2.01 MB, 下载次数: 27)
2.auto-sign. APK-sign.rar (1.66 MB, 下载次数: 33)
这些工具都是google的开源项目…
主要流程:
1.反编译
2.插入代码
3.重新打包
方法:
有了前面的铺垫,我就不再啰嗦了.
命令:java -jar apktool.jar d 目标文件.apk
在apktool.jar所在目录下就生成了这个apk反编译后的文件夹,打开看看!
包括xml在内的文件都被解码了!
不过我们关注的是smali文件夹,打开看看,里面的目录结构和源码的目录结构是一致的!
找到要修改的地方.在这个例子里,就在Main.java(第一个载入的activity)的OnCreate方法里插入一段代码吧!
打开 Main.smali
- .class public LCMD100/demo/slipButton/Main;
- .super Landroid/app/Activity;
- .source "Main.java"
- # interfaces
- .implements LCMD100/demo/slipButton/OnChangedListener;
- # direct methods
- .method public constructor <init>()V
- .locals 0
- .prologue
- .line 14
- invoke-direct {p0}, Landroid/app/Activity;-><init>()V
- return-void
- .end method
- # virtual methods
- .method public OnChanged(Z)V
- .locals 2
- .parameter "CheckState"
- .prologue
- const/4 v1, 0x0
- .line 28
- if-eqz p1, :cond_0
- .line 29
- const-string v0, "\u6253\u5f00\u4e86..."
- invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
- move-result-object v0
- invoke-virtual {v0}, Landroid/widget/Toast;->show()V
- .line 32
- :goto_0
- return-void
- .line 31
- :cond_0
- const-string v0, "\u5173\u95ed\u4e86..."
- invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
- move-result-object v0
- invoke-virtual {v0}, Landroid/widget/Toast;->show()V
- goto :goto_0
- .end method
- .method public onCreate(Landroid/os/Bundle;)V
- .locals 2
- .parameter "savedInstanceState"
- .prologue
- .line 18
- invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
- .line 19
- const/high16 v1, 0x7f03
- invoke-virtual {p0, v1}, LCMD100/demo/slipButton/Main;->setContentView(I)V
- .line 21
- const/high16 v1, 0x7f05
- invoke-virtual {p0, v1}, LCMD100/demo/slipButton/Main;->findViewById(I)Landroid/view/View;
- move-result-object v0
- check-cast v0, LCMD100/demo/slipButton/SlipButton;
- .line 22
- .local v0, myBtn:LCMD100/demo/slipButton/SlipButton;
- invoke-virtual {v0, p0}, LCMD100/demo/slipButton/SlipButton;->SetOnChangedListener(LCMD100/demo/slipButton/OnChangedListener;)V
- .line 23
- return-void
- .end method
你发现里头的代码是见都没见过的格式,这就是java的汇编代码了…
学过80x86汇编的同学看着这些代码是不是也觉得陌生?
没事,我们可以对照前面介绍的那种方法查看源码,然后寻找修改的位置!
找到这一行:
.method public onCreate(Landroid/os/Bundle;)V
这就是OnCreate方法的代码起始了,在
.line 23
return-void
之前插入如下代码: (效果是Toast弹出一句话.)
为什么是这个,其实我也不懂smali,但是可以把自己要的功能写出来,再反汇编…然后copy到这来…
好吧,我们来分析一下这段代码,前面是类似申明了两个变量,v0,v1,然后调用了Toast的makeText方法(列出了参数),再然后调用了其show方法…
看吧,其实我们是能大概看懂smali的内容,只是不懂语法而已!
好吧,废话不多说.
现在改好了,用apktool重新打包~
命令: java -jar apktool.jar b 目标文件夹
执行完后,就在这个目录里生成了两个目录,分别是build,dist
Build下是中间文件,dist下则是apk文件(但是这个apk文件未签名)
下面就是重新签名了.
先解压auto-sign
我们进入Build文件夹,复制apk文件夹到auto-sign文件夹下,然后执行命令:
sign_pack.bat apk
稍等片刻,你会发现文件夹下生成了对应的目录,进入这个目录,apk静静地躺在那…
赶紧,装到手机上看看,是不是改成了?
成功弹出,哈哈...
至此,apk的反编译和代码插入就结束了.
借此方法,我们可以轻松的对apk进行DIY...
欢迎转载,但,转载请注明出处!
发表评论
-
Android 学习资料大集合
2012-02-22 11:23 2552<script type="t ... -
总结了近百个Android优秀开源项目,覆盖Android开发的每个
2012-02-21 11:21 1960Android开发又将带来新一轮热潮,很多开发者都投入到这 ... -
(转)一种新的MAT使用方法分析内存溢出问题
2012-02-21 09:42 1989相信很多人都用过MAT来分析内存溢出,而且网上有很多的使用方法 ... -
(转)Android* 应用性能调试
2012-02-08 09:33 1510概述 创造愉快用户体验的关键是开发响应快捷的应用。借助And ... -
Android SDK 中Android.net.wi
2012-02-06 15:20 1854这里列了很多,但是大致可以分为四个主要的类ScanResult ... -
android 从assets和res中读取文件(转)
2012-02-03 15:02 25391. 相关文件夹介绍 ... -
textview 超链接去掉下划线和设置超链接颜色
2011-12-06 17:15 3791/** * 点击超链接时打开其他博主资料页面 * ... -
按钮Listview等点击效果
2011-11-12 22:58 4014想设置listview中每行在点击、选中等不同状态下有不同的背 ... -
android 获取视频和图片的缩略图
2011-11-12 01:53 118191 在显示视频图片列表时,发送彩信时,制作幻灯片时都需要显示视 ... -
调用android系统图标
2011-10-31 16:54 2846Android系统中自带了很多图标,我们的程序可以方便使用。 ... -
The content of the adapter has changed but ListView did not receive a notificati
2011-10-27 15:43 1165在Android开发过程中,使用了大量的ListView,发现 ... -
android的上下文菜单---context menu
2011-09-23 09:53 1263android的菜单有三种: ... -
选择系统图片方法时返回图片真实路径
2011-09-21 10:36 1619protected void onActivityResul ... -
android一些技巧
2011-09-01 18:08 1505EditText ed = ... -
android TextView中超链接的事件捕捉(textview上LINK的点击事件)
2011-08-19 18:43 2528package com.cm; import java. ... -
Android的TextView使用Html来处理图片显示、字体样式、超链接等
2011-08-19 18:38 4559转载:http://my.oschina.net/java ... -
Android 设置EditText显示或隐藏密码
2011-08-17 16:37 2234设置EditText显示或隐藏密码. 在CheckBox的o ... -
android调用系统资源裁剪图片
2011-08-08 12:52 28431 import java.io.File; 2 import ... -
Android 复制 粘贴
2011-07-25 10:18 2526Android 复制 粘贴 ClipboardManager ... -
三款Json查看小工具
2011-07-07 10:55 2695JSON(JavaScript Object Nota ...
相关推荐
apk反编译代码解析,教你读懂.dex2jar代码
UnityStudio是资源提取工具,dnSpy-net代码反编译工具,两款UnityApk反编译工具,亲测可用
APK反编译APK反编译APK反编译APK反编译APK反编译APK反编译APK反编译APK反编译
APK反编译工具.APK反编译工具.APK反编译工具.APK反编译工具.
APK反编译工具,包含apktool ,dex2jar, jd-gui.exe三种
apk反编译工具 直接运行bin目录中的jadx-gui.bat,选择apk文件即可 有些apk的体积比较大的时候,反编译的时候会卡住或者假死。 解决方案: 使用记事本或者notpad++打开jadx-gui.bat 更改应用运行内存 变更前: set ...
已集成多种工具,jd-gui,dex2jar,jar2dex,等,可视化apkToolBox操作软件,一键完成apk解析与反编译。
可以将apk反编译成java源代码的工具,具体使用方法可参考 http://blog.csdn.net/kjianjun/article/details/7742989
APK反编译工具(代码混淆过或者用第三方加固工具的Apk,反编译无法看到源代码)里面用教程,最后将smali 转java。
android如何将apk反编译成为源代码,里面提供了工具以及反编译教程,有兴趣的可以下载来看看。
Android反编译工具合集,包括最新apktool、dex2jar、jd-gui、smali2java。(2018.4.21)
APK反编译,jar包解析;APK反编译,jar包解析;APK反编译,jar包解析;APK反编译,jar包解析;APK反编译,jar包解析;APK反编译,jar包解析;APK反编译,jar包解析;APK反编译,jar包解析;APK反编译,jar包解析;APK反编译,jar包解析;...
反编译Apk得到Java源代码 工具下载:需用到dex2jar和JD-GUI这2个工具 dex2jar下载地址:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip JD-GUI下载地址: windows版JD-GUI:...
apk反编译图形化工具,无需拥有代码,替换各种资源文件。希望对你有帮助。
1. 下载成功后解压 2. 将apk文件放到onekey-decompile-apk目录下 3. 将apk文件拖拽到_onekey-decompile-apk.bat上 ... 会在onekey-decompile-apk目录下生成和apk同名的jar文件(dex2jar反编译出来的class)
APK反编译工具.rar APK反编译工具.rar APK反编译工具.rar
APK反编译专家,可对android apk进行反编译,得到源码。