Android如何防止apk程序被反编译

作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。

Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹

proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。

下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk-windows\tools\lib\proguard.cfg的内容:

 

  1. -optimizationpasses 5
  2. -dontusemixedcaseclassnames
  3. -dontskipnonpubliclibraryclasses
  4. -dontpreverify
  5. -verbose
  6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
  7. -keep public class * extends android.app.Activity
  8. -keep public class * extends android.app.Application
  9. -keep public class * extends android.app.Service
  10. -keep public class * extends android.content.BroadcastReceiver
  11. -keep public class * extends android.content.ContentProvider
  12. -keep public class * extends android.app.backup.BackupAgentHelper
  13. -keep public class * extends android.preference.Preference
  14. -keep public class com.android.vending.licensing.ILicensingService
  15. -keepclasseswithmembernames class * {
  16. native <methods>;
  17. }
  18. -keepclasseswithmembernames class * {
  19. public <init>(android.content.Context, android.util.AttributeSet);
  20. }
  21. -keepclasseswithmembernames class * {
  22. public <init>(android.content.Context, android.util.AttributeSet, int);
  23. }
  24. -keepclassmembers enum * {
  25. public static **[] values();
  26. public static ** valueOf(java.lang.String);
  27. }
  28. -keep class * implements android.os.Parcelable {
  29. public static final android.os.Parcelable$Creator *;
  30. }

 

从脚本中可以看到,混淆中保留了继承自Activity、Service、Application、BroadcastReceiver、ContentProvider等基本组件以及com.android.vending.licensing.ILicensingService,

并保留了所有的Native变量名及类名,所有类中部分以设定了固定参数格式的构造函数,枚举等等。(详细信息请参考<proguard_path>/examples中的例子及注释。)

让proguard.cfg起作用的做法很简单,就是在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了

完整的default.properties文件应该如下:

 

  1. # This file is automatically generated by Android Tools.
  2. # Do not modify this file – YOUR CHANGES WILL BE ERASED!
  3. #
  4. # This file must be checked in Version Control Systems.
  5. #
  6. # To customize properties used by the Ant build system use,
  7. # ”build.properties”, and override values to adapt the script to your
  8. # project structure.
  9. # Project target.
  10. target=android-9
  11. proguardproguard.config=proguard.cfg

大功告成,正常的编译签名后就可以防止代码被反编译了。反编译经过代码混淆的apk得到的代码应该类似于下面的效果,是很难看懂的:

 


如果您使用的是2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可

 

原文地址:http://blog.csdn.net/sunboy_2050/article/details/6727640

 

No Comments

Android APK反编译详解(附图) 转载

这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。

在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。


一、反编译Apk得到Java源代码
首先要下载两个工具:dex2jar和JD-GUI

前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址:

dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip

JD-GUI:http://laichao.googlecode.com/files/jdgui.zip

具体步骤:

首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;

解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录

运行

dex2jar.bat    classes.dex

生成

classes.dex.dex2jar.jar

生成jar文件的截图如下:

运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了


HelloAndroid源码(编译前的apk源码对照)如下:


二、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件

如果是只是汉化软件,这将特别有用。

首先还是下载工具,这次用到的是apktool

下载地址:http://code.google.com/p/android-apktool/downloads/list

下载:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(两个包都下载)

具体步骤:

将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar

在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\*.apk C:\*文件夹,如下图:

命令行解释:apktool   d   [apk文件 ]   [输出文件夹]

反编译的文件如下(AndroidManifest.xml为例):

特别注意:你要反编译的文件一定要放在C盘的根目录里

 

将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可,命令如下:

打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹:

build

dist

其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok

 

注:本android反编译教程,是在Windows 7  Ultimate  64bit ,测试通过

上述反编译工具包下载

 

另外,作为应用开发者,肯定不希望自己的代码被反编译的,下一遍博客中讲述如何通过混淆代码放在反编译:

Android如何防止apk程序被反编译

转载地址:http://blog.csdn.net/sunboy_2050/article/details/6727581

,

No Comments

Jquery Tipswindown开发总结

Tipswindown开发总结

之前在做弹出页的时候使用了jquery的GreyBox(博文:http://blog.csdn.net/shellwin/archive/2010/05/30/5634674.aspx),但是在使用过程中是弹出了别的页面,这在本页面的数据访问比较麻烦。这次在做项目中的高级查询的时候想仿照一下51job上面的弹出层进行实现,找到了jquery的一个插件tipswindown,这个由于是弹出的内容可以在本页指定的div上定义(控件,代码等),在后台访问和存储数据的时候都比较方便,所以使用它。具体的步骤如下:

第一步:加入对应的jquery.js,tipswindown.js代码:

<script src=”js/jquery/jquery.js” type=”text/javascript”></script>

<script src=”js/jquery/tipswindow/tipswindown.js” type=”text/javascript”></script>

第二步:加入默认的css文件,当然这个是按照自己的需求可以进行修改的。代码:

<link href=”js/jquery/tipswindow/tipswindown.css” rel=”stylesheet” type=”text/css” />

第三步:编写对应的js代码:

<script type=”text/javascript”>

     $(document).ready(function() {

             $(“#btnSetType”).click(function() {

                       tipsWindown(“标题”,”id:showType”,”350″,”150″,”true”,”",”true”,”id”)

             });

     });

 </script>

btnSetType就是在之后的页面中定义的<input type=button>的id,对于tipsWindown函数说明如下:

顺序 参数 功能 备注
1 title 弹出层的标题 必填,纯文本
2 content 弹出层的内容 text 文本内容
id 页面里某id的标签
img 图片
url get或post某一页面里的html,该页面要求只包含body的子标签
iframe 目标地址在框架显示
3 width 弹出层的宽 必填,比如“200”。(不需要带px)
4 height 弹出层的高 同 width
5 drag 是否可拖动 必填,可选参数(true,false)
6 time 自动消失时间 可不填,默认不自动关闭;参数可为空(“”)
7 showbg 是否显示遮罩层 可不填,默认不显示(此项如填了,它前面的time也必须要填)
8 cssName 弹出层附加样式名 可不填

 

第四步:定义对应的html代码和弹出层内容,代码:

<input type=”button”  value=”弹出” id=”btnSetType” />

<div id=”showType” style=”display:none;”>

我是弹出层内容!

</div>

当然在页面初始打开的时候不需要显示showType的div所以需要将其display设置为none。

,

No Comments

完整版大型网站SEO策划方案


关于行业网站优化我写的只是SEO的操作细则并非运营思路,运营思路将在后期引入,这个行业网站优化细则我花几天的时间进行梳理结构和整理,希望大家提意见,同时谢谢长期支持本站的SEOer。行业站的优势在于其海量的信息,所以从优化策略上来讲不同于普通的企业网站优化思路,应该先占领行业长尾关键词,然后向目标关键词突破的逆向思维模式,即农村包围城市,做行业站打的就是持久战。其中常见的SEO的外链思维仅仅是停留在几个目标关键词上,而行业站却不同,我们要做的是通过SEO手段,挖掘海量的长尾关键词然后获得巨大的流量。其实,当一篇内容碰见SEOer的时候,已经不是简单的内容,而是一个可以被利用的长尾关键词,是一个搜索引擎的诱饵。我们要让所有的内容页面即长尾关键词页面都能为我们创造价值,从而进行转化,这应该才是我们的最终目的。 Read the rest of this entry »

, , ,

1 Comment

微博批量删除

腾讯微博如何批量删除?   

解答:目前没有这个功能哦,小编还在找办法!   

新浪微博如何批量删除?   

新浪的也是,目前只能自己手动一条条慢慢删除,   

如何批量删除微博粉丝?   

不管是新浪或者是腾讯微博,都是需要手动删除的!   

小编发这个帖的原因是希望大家先收藏起来,小编会第一时间更新相关解决办法!

,

No Comments

婴儿被动抚触操

1. 抚触的视频
    http://v.youku.com/v_show/id_XNTAzMzc2ODg=.html

2. 2-6个月的被动操视频 
    http://v.youku.com/v_show/id_co00XMjQxMzEzODQ=.html
    第一节 两手胸前交叉
    第二节 伸屈肘关节
    第三节 肩关节运动
    第四节 伸展上肢运动
    第五节 伸屈踝关节
    第六节 两腿轮流伸屈
    第七节 下肢伸直上举
    第八节 转体翻身

3. 7-12个月的主被动操视频 
    http://v.youku.com/v_show/id_cr00XMjQzMTE5NzY=.html

, ,

No Comments

社区型网站运营系列之产品规划

在今天这篇中主要说下社区型网站的产品规划方面的一些看法,这里的社区型网站是指靠“社区驱动”的网站,比如说flickr、豆瓣或者说博客大巴这种。

那么,什么是社区型网站呢?这个其实很难去定义,下面只能说社区不应该是怎么个样子的: Read the rest of this entry »

No Comments

国外互联网餐饮模式和国内相似者

最近我为工作做了一些研究,对国外互联网餐饮模式和国内的相似模式做整理,现在择取主要内容贴在blog上。

餐饮行业的互联网公司,盈利模式有以下几种类型。
软件销售模式:为餐饮企业提供管理软件和存储服务,利用互联网优势,从软件销售和软件服务中盈利。
中介抽佣模式:收集、优化餐厅信息,让用户可以便利搜索和预订,从订单中抽佣。
广告媒体模式:和中介抽佣模式类似,广告模式也需要收集大量的餐厅信息,提供给用户查询,但核心目的是利用用户规模,以推荐餐厅和硬广告盈利。

下文以比较典型的国外企业作为范例,结合国内同类型的企业,进行总结归纳,提出了观点和解决方案。最后附上一些正在出现的新的创意模式,供参考。

  Read the rest of this entry »

, , ,

No Comments

美折扣餐饮网站DailyGobble上线 挑战Groupon

据国外媒体报道,毕业于哈佛商学院的陈大志(音译:Dazhi Chen)曾是微软前产品经理,通过在分类信息网站Craigslist.com上发布招聘广告,他已招募到20名员工,其投资50万美元创办的网站 DailyGobble.com,能够与团购网站LivingSocial和Groupon进行抗衡,并成为一流的折扣订餐网站。

除担任过微软产品经理之外,陈大志还曾在迈克尔·戴尔(Michael Dell)旗下的对冲基金工作过一段时间。他创办DailyGobble.com的目的,是想让这家网站像Expedia提供打折机票一样,在非高峰时期通过折扣服务把消费者吸引到各个餐饮场所。 Read the rest of this entry »

, ,

No Comments

人人网移动开发架构

前言

说起手机操作平台的发展先要说移动终端的发展,因为平台的发展离不开移动终端,近十年移动终端发展和未来移动终端趋势大体可分为以下四个个阶段:

第一个阶段:功能终端。满足用户基本通信需求,如发短信、打电话,附加些贪食蛇、推箱子小游戏。

第二个阶段:智能化的终端。可扩展第三方应用,实现上网浏览等互联网基础功能,以诺基亚S60手机为代表的。 Read the rest of this entry »

,

No Comments