=========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过来。
Android混淆、反编译以及反破解的简单回顾
         搜索下,发现文章相关文档好多好多。就简单点,不赘述了==
 
一、Android混淆
1)概述
         新建Android工程,根目录下会有个proguard.cfg。简单的混淆,你只需要在project.properties内加入一行“proguard.config=proguard.cfg”即可。

注意:在签名发布apk时才会混淆,直接Run As在bin目录下的apk是不被混淆的。签名发布:右键工程->Android Tools->Export Signed Application Package…

如何生成签名,可以参考《Android 数字签名学习笔记》。

 
2)外部jar
         未混淆过的,只加个类库声明就好。例如,用到“SDK目录\ extras\android\support\v4\ android-support-v4.jar”时,可以在-keep前加如下内容即可:
  1. -dontwarn android.support.**
  2. -libraryjars lib/android-support-v4.jar
         第一行,表示去除警告,第二行是声明jar(jar包拷到工程内了,所以是相对目录==)。
         这样混淆后,引用的jar包也会一起被混淆。
 
         如果用的第三方jar包是被混淆过的,或你不想混淆,则用-keep去除即可。例如,之前android-support-v4.jar,如果不需要混淆它的话,可以增加这么一句:
  1. -keep class android.support.v4.** {
  2. *;
  3. }
         此时的话,jar包就不会被混淆了^^。
 
         更详细的使用方法,请参看小节3。
 
1. 在手册的样例中,有两篇即是讲述Android的,如下:

Manual->Examples->A
simple Android activity
&A complete Android application

2. 用法的内容,则在:Manual->Usage。用于学习或查看各命令都是做什么的用。
 
中文相关的话,可以参考下述网址,呼呼~
 
4)可能问题
4.1)新建工程下没有proguard.cfg
         你的环境太老了吧==。
         ProGuard是2.2才加的?记得我起初低于2.2的混淆时,要从2.2工程下把proguard.cfg拷过去。当时建2.1的目录下是没proguard.cfg的。
         不过现在建立个1.5都是有这个文件的。
 
二、Android反编译
1)概述
         apktool + dex2jar +jd-gui。超链接是主页,不了解的可以看看介绍,再转至Downloads。
 
         具体做什么用的或如何操作,参看小节2。
 
         当然,和之前《批处理安装&卸载apk》一样,小子懒人一个T^T。又是批处理(没sh的……):
easyTool.bat
  1. @echo off
  2. title APK反编译[by Join]
  3. rem apktool目录
  4. set p_at="E:\zhao\environment\decompile\apktool"
  5. rem dex2jar目录
  6. set p_dj="E:\zhao\environment\decompile\dex2jar-0.0.9.8"
  7. rem dex2jar后缀
  8. set suffix=_dex2jar.jar
  9. if "%~1"=="" echo 请将apk直接拖放至bat文件!&goto :over
  10. rem 增加apktool路径
  11. set path=%p_at%;%p_dj%;%path%
  12. setlocal enabledelayedexpansion
  13. if /i "%~x1"==".apk" (
  14. echo apktool处理"%~nx1"中...
  15. apktool d "%~1" "%~dpn1"
  16. echo dex2jar处理"%~nx1"中...
  17. dex2jar.bat "%~1"
  18. rem dex2jar执行后直接结束了==
  19. echo 移动文件"%~n1!suffix!"中...
  20. ) else (
  21. echo 文件类型错误:不支持%~x1!
  22. )
  23. :over
  24. echo.
  25. @pause>nul
         保存成bat,修改下apktool目录&dex2jar目录,将apk拖上去即可。会有一个“同名”文件夹和一个“同名_dex2jar.jar”的文件。文件夹是apktool生成的资源,jar则是dex2jar反编译出的代码。然后用jd-gui打开jar即可。
         注意:dex2jar需要用最新的,可以直接用于apk。代码增加了zip解压,不再需要手动了,不清楚哪个版本开始的==。才发现的,bat也刚升级了下。
 
2)更多
         看这篇文章就可以了:android反编译小结
 
三、Android反破解
         不废话,参见“看雪学院->Android软件安全->APK反破解技术小结”。
         那位版主现总结了四篇文章,如下:
 
         还有一些回复和摘录,如下:
 
1)可以介绍一下openssl工具,挺好用的。
 
2) 以下为一段整合的回复:
-> 呵呵~!代码混淆能避免被别人破解吗?
-> 不能,只是会增加别人破解的难度。如果要防别人破解的话,最好的方法是使用NDK,用C、C++写的代码,用NDK编成so库,用JNI进行调用!
-> SO库文件包含符号, 调试也比java代码方便, 所以某种意义上说逆向so里面的native code比逆向java还容易。
-> Open Source 成就了 GNU Tool-chain. ELF里面符号表是“一等公民”. 所以默认选项生成的目标文件里面带符号,虽然可以通过选项分离符号,但是很多时候都会忽略了这一点。
不过我相信Open Source模式才是未来软件工程的王道。
 
3)可以多关注dalvik是怎么实现java对JNI调用的。其中会涉及到怎么定位一个native func,有文章可做。
 
4)Dalvik虚拟机类加载机制的SDK类

A class loader that loads classes from .jar and .apk files containing a classes.dex entry.

Provides a simple ClassLoader implementation that operates on a list of files and directories
in the local file system, but does not attempt to load classes from the network.

 
四、后记
         我用Proguard觉得最大的好处不在于混淆,而在于压缩了代码,apk整整能瘦一圈呢^^
 

五、补充——反编译odex文件

         没关注过ROM,在反编译4.0系统framework.jar定制SDK时,才发现odex这个东西==。
 
         这里也就直接以这举例了^^
 

1. 下载baksmali-1.3.2.jar & smali-1.3.2.jar

2. 模拟器导出整个/system/framework/
         baksmali 反编译是自动找5个核心的BOOTCLASSPATH,当然某些可能会涉及其他的CLASSPATH需要指定-c再添加。
         总之全部弄出来得了,ROM的话也一样吧?不同公司应该会涉及自己的一些包,就这边加吧?
3. 把两个jar放进导出的framework目录
4. 进入framework目录
5. 以下命令进行反编译啦~

java -Xmx512m -jar baksmali-1.3.2.jar -x framework.odex -o out(反编译进out目录)

java -Xmx512M -jar smali-1.3.2.jar -o classes.dex out(重新生成classes.dex)

第一条命令的话,现版本-a默认为14。出UNEXPECTED TOP-LEVEL EXCEPTION,可能是这出错,记得指定正确。-c,默认会找5个核心CLASSPATH,其他自己指定了。

6. 继而的话,可以用来整成一个apk,或继续dex2jar反编译咯~
 
         参考网址:
                   apk生成odex & 合并odex和少dex的apk为完整apk。
                   当然用这两个jar时,可以先-h看参数说明也差不多。

Android混淆、反编译以及反破解的简单回顾的更多相关文章

  1. C# 反编译-Reflector 反混淆-De4Dot 修改dll/exe代码-reflexil

    反编译工具 Reflector 破解版下载地址:http://pan.baidu.com/s/15UwJo 使用方法:略 反混淆工具De4Dot 开源软件 下载地址http://pan.baidu.c ...

  2. android 反编译,反,注射LOG

    反编译smali注射显示LOG该代码.以后使用: .class public Lnet/iaround/connector/DebugClass; .super Ljava/lang/Object; ...

  3. DotfuscatorPro防止反编译&ILSpy反编译

    DotfuscatorPro_4.9可以防止你的.NET软件被反编译,可以在一定程度上防止你的软件被反编译.现在很多软件都有被反编译的现象,虽然不能做到百分百的防范,但是你至少可以先做些技术上的处理, ...

  4. 反编译工具reflector破解方法

    文件下载:http://files.cnblogs.com/lori/Red.Gate.Reflector7.6.rar 破解方法: 1. 断网2. 运行.NET Reflector,点击Help - ...

  5. 【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译

    反编译工具 : 总结了一下 linux, windows, mac 上的版本, 一起放到 CSDN 上下载; -- CSDN 下载地址 : http://download.csdn.net/detai ...

  6. Android: apk反编译 及 AS代码混淆防反编译

    一.工具下载: 1.apktool(资源文件获取,如提取出图片文件和布局文件) 反编译apk:apktool d file.apk –o path 回编译apk:apktool b path –o f ...

  7. 转 谈谈android反编译和防止反编译的方法

    谈谈android反编译和防止反编译的方法   android基于java的,而java反编译工具很强悍,所以对正常apk应用程序基本上可以做到100%反编译还原. 因此开发人员如果不准备开源自己的项 ...

  8. Android反编译基础(apktoos)--广工图书馆APK

    更多精彩内容 :http://www.chenchuangfeng.com QQ:375061590 ------------------------------------------------- ...

  9. 谈谈android反编译和防止反编译的方法(转)

    谈谈android反编译和防止反编译的方法(转) android基于java的,而java反编译工具很强悍,所以对正常apk应用程序基本上可以做到100%反编译还原. 因此开发人员如果不准备开源自己的 ...

随机推荐

  1. MYSQL 中的变量

    1.用户自己定义变量 2.系统变量(全局变量,会话变量) ----------------------------------------------------------------------- ...

  2. gl.TexSubImage2D 使用遇到图片翻转的问题

    这2天在用gl.TexSubImage2D把几张小图转拼接成大图,如果在渲染物体之前拼接好就没有问题,但在开始渲染物体后拼接就会有问题.后来我做了2件事情来找原因, 1. 用拼好的图来画一个正方形,大 ...

  3. 'adb' 不是内部或外部命令,也不是可运行的程序

    启动adb shell的时候,出现如下问题: 'adb' 不是内部或外部命令,也不是可运行的程序或批处理文件. 在确保自己的SDK安装正确的时候,就很好办了,找到SDK安装目录\platform-to ...

  4. Android ListView A~Z快速索引(改进版)

    上一篇文章虽然实现了ListView 快速索引的效果,但是有一个小小的Bug.这个Bug我在前面也说了,这篇文章就来解决这个Bug. 我研究的时候发现只要showBg值为true,中间的字母就显示,而 ...

  5. linux之SQL语句简明教程---GROUP BY

    我们现在回到函数上.记得我们用 SUM 这个指令来算出所有的 Sales (营业额)吧!如果我们的需求变成是要算出每一间店 (Store_Name) 的营业额 (Sales),那怎么办呢?在这个情况下 ...

  6. linux命令之pwd(print working drectory)

    Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...

  7. linux中的strings命令简介

    摘自:http://blog.csdn.net/stpeace/article/details/46641069 linux中的strings命令简介 在linux下搞软件开发的朋友, 几乎没有不知道 ...

  8. 命令行运行命令时报错You don't have write permissions for the /Library/***

    这是由于要运行这些操作时必须有管理员的权限(比方更新软件),比方更新cocoapods时报错 soindy:SmartThermo soindy$ gem install cocoapods Fetc ...

  9. UVA - 10574 Counting Rectangles

    Description Problem H Counting Rectangles Input: Standard Input Output:Standard Output Time Limit: 3 ...

  10. css3 transiton

    div { width:100px; height:100px; background:yellow; transition-property:width; transition-duration:1 ...