首页 > 后端开发 > 正文

解压出dex文件如何运行

2024-05-10 18:14:53 | 我爱编程网

今天我爱编程网小编整理了解压出dex文件如何运行相关内容,希望能帮助到大家,一起来看下吧。

本文目录一览:

解压出dex文件如何运行

解压出dex文件如何运行

apk文件是把android

sdk编译的工程打包成一个安装程序文件,格式为apk。

APK文件其实是zip格式,但

后缀名

被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex即Android

Dalvik执行程序,你可以在安装Android操作系统的手机中执行即可安装。

拓展资料:

准备好解包工具后,将classes.dex文件从apk

安装包

里拖出来,放到刚刚的Xtemp文件夹内,若是WinXP用户,用鼠标将classes.dex文件拖到undex.

bat文件

上,会弹出

CMD命令

窗口自动解包classes.dex文件,完成会提醒按任意键关闭窗口;若是Win7用户,双击dex.bat文件,按提示操作即可。

解压出dex文件如何运行

什么是dex文件, dex文件的好处是什么?

简单说就是优化后的android版.exe。每个apk安装包里都有。相对于PC上的java虚拟机能运行.class;android上的Davlik虚拟机能运行.dex。

作用

让dalvik能够运行。

dex好处

可以直接用DexClassLoader类加载,动态加载。于是只要在dex上加壳,在程序运行时脱壳,就可以规避静态反编译的风险。

扩展资料

使用dex文件的原因

在Android系统中,一个App的所有代码都在一个Dex文件里面。Dex是一个类似Jar的包,存储了很多Java编译字节码的归档文件。

因为Android系统使用Dalvik虚拟机,所以需要把使用Java Compiler编译之后的class文件转换成Dalvik能够执行的class文件。

解压出dex文件如何运行

android怎么动态调试dex

我爱编程网(https://www.52biancheng.com)小编还为大家带来android怎么动态调试dex的相关内容。

1.1 安装JDK

JAVA环境的搭建请自行查找资料,这里不做详述。

1.2 安装Android SDK

下载地址:

下载完安装包后解压到任意一目录,然后点击运行SDK Manager.exe,然后选择你需要的版本进行安装,如图:

1.3 安装Eclipse集成开发环境

下载地址:

。选择Eclipse for Mobile Developers,解压到任意目录即可。

1.4 创建Android Virtual Device

动态调试可以用真实的手机来做调试环境,也可以用虚拟机来做调试环境,本文采用虚拟机环境。因此创建虚拟机步骤如下:

1打开Eclipse –>windows->Android Virtual Device

2点击Create,然后选择各个参数如图:

这里Target 就是前面步骤中安装的SDK 选择任意你觉得喜欢的版本就可以。点击OK 就创建完毕。

1.5 安装 APK改之理

这个是一个很好用的辅助调试的软件,请自行搜索下载。

1.6 安装 IDA6.6

IDA6.6开始支持安卓APP指令的调试,现该版本已经提供免费下载安装,请自行搜搜。

0x02 Dalvik指令动态调试

2.1 准备工作

安卓APP应用程序后缀为apk,实际上是一个压缩包,我们把它改后缀为rar打开如图:

其中classes.dex是应用的主要执行程序,包含着所有Dalvik指令。我们用APK改之理打开apk,软件会自动对其进行反编译。反编译后会有很多smail文件,这些文件保存的就是APP的Dalvik指令。

在APK改之理里双击打开AndroidManifest.xml,为了让APP可调试,需要在application 标签里添加一句android:debuggable="true" 如图:

然后点击保存按钮,然后编译生成新的apk文件。接着打开Eclipse –>windows->Android Virtual Device,选择刚才创建的虚拟机,然后点击start,虚拟机便开始运行。偶尔如果Eclipse启动失败,报错,可以同目录下修改配置文件:

把配置参数原本为512的改为256 原本为1024的改为512,然后再尝试启动。

在SDK安装目录有个命令行下的调试工具adb shell,本机所在目录为E:\adt-bundle-windows-x86-20140702\sdk\platform-tools,把adb.exe注册到系统环境变量中,打开dos命令行窗口执行adb shell 就可以进入APP命令行调试环境,或者切换到adb所在目录来执行adb shell。

这里先不进入adb shell,在DOS命令行下执行命令:adb install d:\1.apk 来安装我们刚才重新编译好的APK文件。安装完毕会有成功提示。

2.2 利用IDA动态调试

将APP包里的classes.dex解压到任意一目录,然后拖进IDA。等待IDA加载分析完毕,点击Debugger->Debugger Options如图

按图所示勾选在进程入口挂起,然后点击Set specific options 填入APP包名称和入口activity 如图:

其中包的名称和入口activity 都可以通过APK改之理里的AndroidManifest.xml 文件获取:

1

2

3

" package="com.example.simpleencryption">

然后在IDA点击Debugger->Process Options

其他默认不变,端口这里改为8700。这里默认端口是23946,我在这里困扰了很久,就是因为这个端口没有改为8700所致。然后我们看看这个8700端口是怎么来的。在Android SDK里提供了一款工具DDMS,用来监视APP的运行状态和结果。在SDK的TOOLS目录有个DDMS.BAT的脚步,运行后就会启动DDMS。由于我的本机安装了SDK的ADT插件,DDMS集成到了Eclips中,打开Eclips->Open perspective->ddms就启动了DDMS。

如图所示:

在DDMS选中某个进程后面就会注释出它的调试端口,本机这里是8700。

到此所有的工作就准备就绪,然后就可以下断点来调试该APP了。我们在APK改之理中在com目录下查看smali文件 发现MainActivity.smali里有一个感兴趣的函数getPwdFromPic(),那么我们就对它下断以跟踪APP的运行。

在IDA里搜索字符串getPwdFromPic,发现onClick有调用该函数

我们在onClick 函数开始位置按F2下断如图:

然后点击上图中绿色三角形按钮启动调试如图:

调试过程中有一个问题出现了很多次,浪费了我大量的时间,就在写文章的时候,操作时还是遇到了这样的问题。就是点击启动后IDA提示can’t bind socket,琢磨了很久终于找到原因了,当打开过一次DDMS后 每次启动Eclips都会启动DDMS 而8700端口正是被这个DDMS给占用了,然后每次都会启动失败,解决办法就是 虚拟机运行起来后关闭掉Eclips,这时一切就正常了!

事例中是一个APP crackme 提示输入密码才能进入正确界面。这个时候我们输入123,点击登陆,IDA中断在了我们设置断点的地方,这时选中ida->debugger->use source level debugger,然后点击ida->debugger->debugger windows->locals打开本地变量窗口,如图:

然后按F7或F8单步跟踪程序流程,同时可以观察到变量值的变化,也可以在IDA右键选择图形视图,可以看到整个APP执行的流程图:

如上图所示 变量窗口中我们输入了123 被转化成的密码是么广亡,pw变量也显示出了正确的密码,其实这个时候已经很容易判断出正确密码了。

0x03 Andoid原生动态链接库动态调试

通常为了加密保护等措施,有时dex执行过程中会调用动态链接库文件,该文件以so为后缀,存在于APP文件包里。

这里我们以动态附加的方式来调试原生库。

3.1 准备工作

1、将IDA->dbgsrv目录下的android_server拷贝到虚拟机里,并赋予可执行权限

DOS命令分别为:

adb shell pull d:\ android_server /data/data/sv

adb shell chmod 755 /data/data/sv

2、启动调试服务器android_server

命令:adb shell /data/data/sv我爱编程网

服务器默认监听23946端口。

3、重新打开DOS窗口进行端口转发,命令:

adb forward tcp:23946 tcp:23946 如图:

3.2 利用IDA进行动态调试

1、虚拟机里启动要调试的APP 2、启动IDA,打开debugger->attach->remote Armlinux/andoid debugger

端口改为23946 其他保持不变,点击OK

如上图,选中要调试的APP 的数据包名,然后点击OK。

正常情况下,IDA会把APP进程挂起。

3、由于当前程序不是在动态链接库领空,这时我们要重新打开一个IDA,用它打开需要调试的so文件,找到需要下断的位置的文件偏移,并做记录,然后关闭后面打开的这个IDA。

4、在原IDA界面按下ctrl+s键,找到并找到需要调试的so,同时记录该文件的加载基址。然后点击OK 或者cancel按钮关闭对话框。

5、按下快捷键G 输入基址+文件偏移所得地址,点击OK 就跳转到SO文件需要下断的地方,这时按下F2键设置断点。当APP执行到此处时便可以断下来。

3.3 在反调试函数运行前进行动态调试

程序加载so的时候,会执行JNI_OnLoad函数,做一系列的准备工作。通常反调试函数也会放到JNI_OnLoad函数里。进行4.2中第2步时也许会遇到如下情况:

这时APP检测到了调试器,会自动退出,那么这时调试策略需要有所改变。

接着4.1第3步后,在DOS命令行执行命令:

adb shell am start -D -n com.yaotong.crackme/com.yaotong.crackme.MainActivity

来以调试模式启动APP 如图:

com.yaotong.crackme是APP包名称,com.yaotong.crackme.MainActivity是执行入口 这些可以用APK改之理查看。

这时由于APP还未运行,那么反调试函数也起不了作用,按照4.2中第2步把APP挂起。这时IDA会中断在某个位置

然后点击debugger->debugger opions设置如下:

点击OK 后按F9运行APP,然后再DOS命令下执行命令:

jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

这时APP会断下来,然后按照4.2中的3、4、5补找到JNI_OnLoad函数的地址并下断,然后按F9 会中断下来。然后便可以继续动态跟踪调试分析。

以上就是解压出dex文件如何运行全部内容,更多相关信息,敬请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“解压出dex文件如何运行”相关推荐
在LINUX下 用JAVA如何解压rar文件
在LINUX下 用JAVA如何解压rar文件

在LINUX下用JAVA如何解压rar文件楼主试试这个代码~~packagedecompress;importjava.io.File;importjava.io.FileOutputStream;importorg.apache.tools.ant.Project;importorg.apache.tools.ant.taskdefs.Expand;impo

2024-04-04 05:10:44
如何运行jar文件
如何运行jar文件

如何运行jar文件1、下载并安装最新版的Java虚拟机。下载网址:java.com/zh_CN/。2、安装好Java虚拟机后,双击需要运行的jar文件或在jar文件上点击鼠标右键,在弹出的菜单中选择“打开方式”→“选择默认程序”。3、在“打开方式”设置窗口中点击选中选项“始终使用选择的程序打开这种文件”前的复选框,再点击旁边的“浏览”按钮。4、选择JAVA虚拟机的安装文件夹,

2024-03-29 22:08:52
Win7系统打开java文件出错显示乱码如何解决
Win7系统打开java文件出错显示乱码如何解决

Win7系统打开java文件出错显示乱码如何解决很多程序人员都会使用java程序写文件,只有成功运行java程序文件显示正确结果,可是有用户在打开java文件的时候,却出现错误,显示乱码,要怎么解决这样的问题呢?现在随小编一起来看看Win7系统打开java文件出错显示乱码的具体解决方法吧。原因分析:出现这样的情况是由于打开程序不正确造成的,下面小编给大家分享下解决方法。解决步骤:

2024-03-28 13:41:09
jar文件怎么运行jar文件怎么运行
jar文件怎么运行jar文件怎么运行

jar文件怎么运行jar文件怎么运行关于jar文件怎么运行,jar文件怎么运行这个很多人还不知道,今天来为大家解答以上的问题,现在让我们一起来看看吧!1、jar文件是java程序导出之后的打包文件,在一些Linux系统或者手机系统中可以直接运行。2、但是大部分用户现在使用的都是Win7系统,而在Win7系统下是不可以直接运行jar文件的,必须要借用第三方软件或是其他方法才可以。3

2024-06-24 21:04:37
如何使用命令行编译以及运行java文件
如何使用命令行编译以及运行java文件

如何使用命令行编译以及运行java文件方法/步骤我们先新建文本文档,输入自己的java程序。这里我写一个简单的java程序,来做示范。importjava.util.*;publicclassHelloDate{publicstaticvoidmain(String[]args){System.out.println("Hello,it's:");System.

2024-03-15 03:57:49
python3.86如何运行出爱心?
python3.86如何运行出爱心?

python3.86如何运行出爱心?#运行输出爱心sample=["●●","●●●●","●●●","●●","●●","●●","●"]forstrinsample:print(str)print("\n\n\n")怎么用python画图对于刚刚学习编程的同学来说对编程是非常陌生的,对很多的代码也是非常陌生,高中忙于学习的我们甚至可以说是对编程是一无所知,进入

2023-12-13 23:55:12
intellijidea无法运行java文件解决方法(idea不能运行java.exe系统找不到)
intellijidea无法运行java文件解决方法(idea不能运行java.exe系统找不到)

intellijidea无法运行java文件解决方法IntelliJIDEA有时候会遇到无法运行java文件的问题,首先查看sdk是否设置了,可以在文件里面查看并设置。intellijidea无法运行java文件解决方法1、将ProjectSDK:设置为1.8版本。2、将Projectlanguagelevel:设置为对应的8版本。3、在我们JavaSE文件夹下创建文件夹名

2024-06-30 06:55:59
怎么运行jar文件
怎么运行jar文件

怎么运行jar文件1、首先确保自己的系统是在安装好java环境条件下,按下Windows+R键,在弹出的运行框中输入CMD:2、先在弹出的黑框框中切换到.jar文件的所在目录,在黑框中输入java-jar ****.jar,****表示要运行的.jar文件名,如图所示:3、此时敲回车键后,.jar文件就开始成功运行了。以上就是运行jar文件的详细步骤:如何在黑窗口运行桌面

2024-06-09 07:25:54