02_反汇编_反编译

实际上安卓的应用都是zip包,只不过把zip扩展名修改了,修改成了APK.所以如果你想拿到它的图片的话,实际上特别简单,你就把它这个.apk换成.zip.换成.zip之后这里的图片资源就都可以拿到了.

有些公司可能美工的水平或者美工的人数比较少,项目还比较急,这个时候就上网上去找。看谁的比较好看。下载下来之后扩展名换一换换成.zip就把它里面的资源就都拿出来了。这样就减少了一些成本。所以说这就是一个比较简单的办法。

它大部分图片都是放在hdpi。

用像素密度来区分不同的图片的文件夹。

 x越多,代表当前这个文件夹所对应的图片的分辨率、支持的像素密度就越高。

但是实际上大部分的应用并不会把所有的图片,每一个都搞出一份来丢到不同的目录下。这是没有人那么做的,因为你要那么搞的话你的应用的体积就会比较大了。它会根据不同的像素密度对这个图片进行压缩或者放大,就是自动去实现。大部分情况咱们只需要把这个东西丢在比较常见的像素密度的文件夹里,就是xhdpi或者是hdpi.这样就可以了。因为现在像mdpi的手机基本上已经绝迹了。ldpi和mdpi的手机特别特别少。所以咱们只需要把它放在hdpi和xhdpi.通过这种方式只能去拿到它的图片资源,你像所有的XML文件咱们是看不到的。


早期的反编译工具:

apktool是帮助把你的应用进行反编译的。

反编译之后咱们拿到的就是这两个东西

反编译之后再去看res/anim下相关的XML文件就没有问题了。

这样咱们就只能看到XML和它的资源。但是咱们现在是看不到源代码的。想看源代码就要用另外一个工具dex2jar.安卓中所有的.class最终都会打包生成一个dex文件。dex文件通过dex2jar可以转换成.jar.之前通过.jar来查看java代码就使用了一个工具叫JD-GUI.把.jar丢进去,丢进去之后就可以看到它对应的java的源代码了。

所以呢早期要通过三个工具:apktool、dex2jar、jd-gui这三个工具才可以把应用进行反编译。但是现在安卓逆向助手就把这些东西打了个包,我们可以使用安卓逆向助手的图形化界面进行反编译操作了,不用去记那些命令了。

 

 

 

 

java基础讲过,java不管是方法名还是类名都应该是有意义的,不能随便写。但是实际上在打包之前,它做了一件事情叫做混淆,混淆的作用就是迷惑你。提高了你把它代码读懂的难度。因为它的类名都没有意义。而且它的项目都比较大,有那么多个文件,都是a、b、c、d、e、f、g的。你想把它拆出来的话可能就比较费工夫了。安卓其实也没有特别复杂的一些逻辑,你有工夫猜它还不如自己写了。花功夫也是没问题的,也能猜个大概。但是真要花那么多时间去搞这个事的话还真不如自己写了。所以说一般的应用在上线之前都会去进行一个混淆的操作。但是有一些小的应用它也就懒得做这些事了,可能在混淆的过程当中会出现一些问题。比如你引入一些第三方的库,它这个库实际上在放到你的项目里面已经做了一次混淆了。做了混淆的话呢你再混淆它的时候就得加一些例外的情况。如果说这个小公司有一些开发的人懒得去搞这个事可能也就不混淆,拿着这个源代码直接就传上去了。所以你上市场上去找一些下载量不是很大的应用,你去翻一翻,也会有一定的积累能直接拿到它的源代码。

看一下这个java反编译之后实际上我拿到的就是混淆之前的源码。实际上我拿到的就是java的源代码.只不过呢它在打包之前做了一次混淆,虽说通过混淆可以去提高这个代码被破译的难度,但是呢真的去做的话实际上有一些逻辑还是可以看出来的。比如一些数据结构,例如HashMap

  private int a = 0;private int b = 0;private int c = 0;private int d = 0;private HashMap e = new HashMap();

还有一些是Map.Entry

    Map.Entry localEntry = (Map.Entry)localIterator1.next();

这些你真的是花点功夫的话,相对还是比较容易给它还原成最开始的样子。如果是没进行混淆的,例如之前写的ip拨号器.

 

如果你没做混淆的话基本上就相当于把你的源代码就丢到市场上了。正常来讲咱们发布之前都要对它进行混淆。关于混淆这部分的内容以后在就业之前还会有几天的课程。关于加密、打包、还有混淆相关的内容。现在咱们只需要搞清楚你反编译之后能拿到一个什么样的代码这样就可以了。

所以说如果你不做混淆这个java代码基本上就是相当于你把它丢到市场上去了。如果你不混淆的话,差不多就相当于你把这个源码就直接发到市场上了。你辛辛苦苦敲的这些东西别人一眼就可以看到。很简单,点一点就可以拿到它。

这个就是java的反编译的过程。


C的相对来讲就更安全一些。 有一个对C进行反汇编的工具。

 

 

 

这就是汇编的代码。PUSH就是压到寄存器里面。PUSH压到栈里。MOVS在寄存器里给它挪一挪。这个都是在ARM下的汇编的代码。如果你不懂汇编那就看不懂了。所以这个就相对来讲要比java要安全一些。

现在这个工具也有通过汇编给猜出C的功能。按F5

Pseudcode-A:伪代码-A.这就能通过汇编猜出它的伪代码出来.虽说它猜出了C的伪代码,但是实际上咱们写的跟这个还是差距蛮大的。专门做JNI的逆向的,可以自己去先写,写完之后他拿着自己的代码去进行反汇编。反汇编之后看一看这个东西长成什么样。

一看什么helloFromJava是方法名,()V是方法签名.也可以去猜你是要C回调Java.

所以说呢你说哪一种方式特别特别的安全,这个没有太特别安全的。只要被高水平的黑客盯上的话,被破解就是时间的问题。但是呢你要这么搞的话相对来讲这个安全性会高许多,比java的代码要高许多。所以一般都要把跟钱相关的,或者说像银行这样的应用,去跟动物相关的加密的这些业务逻辑,都要放在C这边去处理。而且C的代码它也可以去混淆。你也可以给它起一些很恶心的名字。也可以给代码里面加一些垃圾代码。所以说呢通过C来去做跟安全相关的这些业务逻辑,它是比java要安全很多。

这个就是java和C之间的反编译和反汇编的对比。实际上java的这个反编译直接就拿到了之前写的源码,或者说是混淆之后的源代码。但是C的这个.so文件对它进行反汇编你即使猜一下它的伪代码看起来呢也不是太靠谱。所以C的.so要比java的.dex或者是.jar或者是.class要安全许多。

转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/7148633.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL约束语法

约束 作用:对表中的数据进行限定,保证数据的正确性、有效性、完整性! 约束分类: 约束说明PRIMARY KEY主键约束PRIMARY KEY AUTO_INCREMENT主键、自动增长UNIQUE唯一约束NOT NULL非空约束FOREIGN KEY外键约束FOREIGN KEY ON UPDAT…

修改项目名称之后,访问不到项目的问题

转载于:https://www.cnblogs.com/Joke-Jay/p/7190187.html

stanford-parser for C#

在项目里用到C#对英文句子进行词性标注。比較成熟的英文词性标注软件是stanford-parser。它个C#版本号,也是借助于IKVM完毕JAVA-C#的转换。详细配置过程例如以下: 1、下载stanford-parser的jar包 http://nlp.stanford.edu/software/lex-parser.shtml 2…

【bzoj】 1412: [ZJOI2009]狼和羊的故事

Description “狼爱上羊啊爱的疯狂,谁让他们真爱了一场;狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐&am…

计算机基础--网络

互联网协议 互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。 互联网协议按照功能不同分为osi七层或者tcp/ip五层或tcp/ip四层 每层常见物理设备 因为学习python编程只需要了解tcp/ip五层模型,所以我们只需…

万字详解数据库连接池

数据库连接池的概念 数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连…

编译OSG的FreeType插件时注意的问题

使用自己编译的freetype.lib,在编译osgdb_freetype插件项目时,报错LINK错误,找不到png的一堆函数 最简单的方式是不要使用PNG编译freetype。记住不要犯贱。 转载于:https://www.cnblogs.com/coolbear/p/7205906.html

高动态范围红外图像压缩

BF&DRC 近期看了一篇高动态范围红外图像压缩的文章,《New technique for the visualization of high dynamic range infrared images》.这篇文章主要利用双边滤波器把宽动态红外图像切割为基本图像和细节图像,再分别对基本图像和细节图像进行处理。对…

Mybatis构建sql语法

构建sql: 之前通过注解开发时,相关 SQL 语句都是自己直接拼写的。一些关键字写起来比较麻烦、而且容易出错。MyBatis 给我们提供了 org.apache.ibatis.jdbc.SQL 功能类,专门用于构建 SQL 语句 常用方法: 查询功能的实现&#xf…

在cli命令行上显示当前数据库,以及查询表的行头信息

在$HIVE_HOME/conf/hive-site.xml文件下加入以下配置文件 <property><name>hive.cli.print.header</name><value>true</value><description>Whether to print the names of the columns in query output.</description> </proper…

SAS笔记(2) RETAIN语句

本文重点&#xff1a; 使用RETIAN,INPUT在每次循环执行时保留上一次PDV中的变量值。SUM语句和SET语句会自动RETAIN变量。1. RETAIN语句 1.1 Example 1 先来看看在DATA步不使用和使用RETAIN语句的差异 没有使用RETAIN: DATA WITHOUT_1;PUT "Before the INPUT statement: &…

Hive优化策略

hive优化目标 在有限的资源下&#xff0c;运行效率高。常见问题 数据倾斜、Map数设置、Reduce数设置等 hive运行 查看运行计划 explain [extended] hql 例子 explain select no,count(*) from testudf group by no; explain extended select no,count(*) from testudf group …

GPU性能实时监测的实用工具

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

JSON转换工具

JSON的处理&#xff1a; JSON(JavaScript Object Notation)&#xff1a;是一种轻量级的数据交换格式。 它是基于 ECMAScript 规范的一个子集&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅…

Vue与Element入门使用

Vue&#xff1a; Vue是一套构建用户界面的渐进式前端框架。只关注视图层&#xff0c;并且非常容易学习&#xff0c;还可以很方便的与其它库或已有项目整合。通过尽可能简单的API来实现响应数据的绑定和组合的视图组件。视图&#xff1a;负责页面渲染&#xff0c;主要由HTMLCSS构…

Redis基础-下载安装配置

Nosql&#xff1a; NoSQL&#xff1a;即 Not-Only SQL&#xff08; 泛指非关系型的数据库&#xff09;&#xff0c;作为关系型数据库的补充。 作用&#xff1a; 应对基于海量用户和海量数据前提下的数据处理问题。 特征&#xff1a; 可扩容&#xff0c;可伸缩大数据量下高性能…

转:20分钟教你使用hexo搭建github博客

注册Github账号 这里我们就不多讲了&#xff0c;小伙伴们可以点击这里&#xff0c;进入官网进行注册。 创建仓库 图片来自Github登录账号后&#xff0c;在Github页面的右上方选择New repository进行仓库的创建。 图片来自Github在仓库名字输入框中输入&#xff1a; Github昵称.…

Maven入门详解与安装配置

Maven&#xff1a; Maven出现前的问题&#xff1a; 假设你现在做了一个项目&#xff0c;项目中肯定要用到一些jar包&#xff0c;比如说mybatis&#xff0c;log4j&#xff0c;JUnit等&#xff0c;除了这些之外&#xff0c;你有可能用到你的同事开发的其他的东西&#xff0c;比如…

Vue生命周期与自定义组件

自定义组件&#xff1a; Element 组件其实就是自定义的标签。例如<el-button> 就是对<button>的封装。 本质上&#xff0c;组件是带有一个名字且可复用的 Vue 实例&#xff0c;完全可以自己定义。 定义格式&#xff1a; Vue.component(组件名称, {props:组件的属性…

Spring DI(依赖注入)

DI依赖注入 IoC&#xff08;Inversion Of Control&#xff09;控制翻转&#xff0c;Spring反向控制应用程序所需要使用的外部资源DI&#xff08;Dependency Injection&#xff09;依赖注入&#xff0c;应用程序运行依赖的资源由Spring为其提供&#xff0c;资源进入应用程序的方…