- 浏览: 484189 次
- 性别:
- 来自: 北京
最新评论
-
fatalfeel:
Irrlicht 3d Engine is full open ...
转:Android世界的15款开源的游戏开发引擎 -
diyangxia:
BigDecimal怎么初始化全局变量呢
android如何保留小数点后x位数字 -
c1230v:
这是一个程序员应该用的方法吗?求靠谱一点
转:android WebView 控件加载本地sdcard中html文件图片的问题 -
dingbuoyi:
楼主是天才 真牛逼
转:Progressbar-设置自己的样式 -
panxiaoming2008:
记住:显示本地文件时 必须使用APK'>file:/// ...
Android使用WebView加载本地资源
写这篇文章之前,有些犹豫,我会不会因此而打开了一个潘多拉魔盒呢?后来一想,Android类似的恶意软件早已问世,说明这世上已经有不少软件安全专家或者黑客们对此并不陌生了。而我,仅仅是作为一个传道者,将这个少数人知道的秘密告诉大家。于是我心安多了,我想我是在为Android软件安全行业早日成熟起来做贡献吧~! 所谓APK指的是Android操作系统的应用程序安装文件。所谓Crack,简单地理解为“破解”。我具体指的是反编译APK文件进行汇编级的代码分析,并修改或插入自己的代码,重新签名打包为APK文件,以达到改变程序原有行为的目的。 由以上的说明可知,我们要Crack一个APK文件,主要流程有三步:反编译、代码分析、重新打包签名。 基本准备 我们需要一些基本的工具进行一些主要的工作。如果你是一个会做Android APK汉化的朋友,那么你应该对这些工具非常熟悉: 第一个工具是android-apktool,A tool for reengineering Android apk files 。这个工具是我们完成APK Crack的核心,利用它实现APK文件的反编译和重新打包。它是Google Code上一个非常著名的开源项目,大家可以在Google Code的网页上获取它和它的Wiki、源码及其他相关信息。网址是:http://code.google.com/p/android-apktool/ 。 第二个工具是Auto-sign。这个工具实现的是APK打包后的签名工作,属于一个小工具。 除了这些基本工具外,为了更好的分析代码,你可能还需要用到一些其他工具,例如:dex2jar和jd-gui等,这里不做详述。 反编译 如果你是一个经常汉化APK程序的朋友,那么反编译这一步你肯定不会陌生。不过,既然这篇文章侧重于基本流程讲解,那么这一步想来是不能省掉的。所以,觉得罗嗦的朋友,请跳过。首先我们需要有一个待反编译的APK。这里我自己写了一个HelloWorld的APK,代码如下: package com.zh_weir.helloworld;
import android.app.Activity; import android.os.Bundle;
public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
我们通过android-apktool对这个APK进行反编译。对于android-apktool的使用,我就不做太多翻译的工作,直接给出说明文档吧。简单一句话,就是命令行执行。 Apktool v1.3.2 - a tool for reengineering Android apk files Copyright 2010 Ryszard Wi?niewski <brut.alll@gmail.com> Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
Usage: apktool [-v|--verbose] COMMAND [...]
COMMANDs are:
d[ecode] [OPTS] <file.apk> [<dir>] Decode <file.apk> to <dir>.
OPTS:
-s, --no-src Do not decode sources. -r, --no-res Do not decode resources. -d, --debug Decode in debug mode. Check project page for more info. -f, --force Force delete destination directory. -t <tag>, --frame-tag <tag> Try to use framework files tagged by <tag>. --keep-broken-res Use if there was an error and some resources were dropped, e.g.: "Invalid config flags detected. Dropping resources", but you want to decode them anyway, even with errors. You will have to fix them manually before building. b[uild] [OPTS] [<app_path>] [<out_file>] Build an apk from already decoded application located in <app_path>.
It will automatically detect, whether files was changed and perform needed steps only.
If you omit <app_path> then current directory will be used. If you omit <out_file> then <app_path>/dist/<name_of_original.apk> will be used.
OPTS:
-f, --force-all Skip changes detection and build all files. -d, --debug Build in debug mode. Check project page for more info.
if|install-framework <framework.apk> [<tag>] Install framework file to your system.
For additional info, see: http://code.google.com/p/android-apktool/
通过apktool d HelloWorld.apk的命令,我们就完成了一个简单的APK的反编译工作。得到了一个叫做“HelloWorld”的文件夹。你可以看见文件夹下有Manifest文件,有反编译出的res资源文件。这些东西都是平时汉化特别关心的,而不是我们要注意的重点。我们需要注意的是一个叫做“smali”的文件夹。 仔细观察,你会发现这个文件夹下的文件组织结构和我们的Android工程中java源码的组织结构几乎一致。只不过Java文件被.smali的文件取而代之了。我们用文本编辑器打开这些.smali文件,你会发现它们都是可识别的、并且非常“整齐”的文本文件,大致如下: .class public Lcom/zh_weir/helloworld/MainActivity; .super Landroid/app/Activity; .source "MainActivity.java"
# direct methods .method public constructor <init>()V .locals 0 .prologue .line 6 invoke-direct {p0}, Landroid/app/Activity;-><init>()V
return-void .end method
# virtual methods .method public onCreate(Landroid/os/Bundle;)V .locals 1 .parameter "savedInstanceState"
.prologue .line 10 invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
.line 11 const/high16 v0, 0x7f03
invoke-virtual {p0, v0}, Lcom/zh_weir/helloworld/MainActivity;->setContentView(I)V
.line 12 return-void .end method
Smali文件其实就是dalvik虚拟机运行的dex字节码文件对应的汇编文件了。如果你了解Java虚拟机的汇编语言Jasmin的话,你会发现两者的语法非常相似。关于smali的语法等问题就不深入下去了,如果你想了解更多,可以访问Google Code上Smali项目主页:http://code.google.com/p/smali/ 。 代码分析与修改 即使你不会Jasmin语法,你也能很容易看明白上面的汇编代码。需要指出的是,apktool反编译出来的汇编代码同样也是面向对象的,而不是面向过程的。这点和C++的反汇编可能有所不同。 根据上面的代码,我们可以看出,这个MainActivity的类有两个成员方法。一个是默认的构造函数;另一个就是我们重载的OnCreate方法了。 在java汇编中,每个成员方法需要首先申明自己所使用的局部变量的个数,以便实现分配存储空间。例如OnCreate使用了一个局部变量,就声明:.locals 1 。后面则使用v0表示。 在一个非静态的成员方法中,p0代表的是这个类本身的引用,相当于this,p1开始才是函数的参数;而对于静态方法,由于没有this指针,所以p0就是函数的第一个参数。(其实本身this指针就是作为一个隐含的参数传递给非静态成员函数的)。 通过分析上面Oncreate的汇编代码,我们可以知道,它首先是调用super类的onCreate方法,然后再setContentView设置显示。其中I、V等表示的是函数的参数和返回变量的类型,这是通用做法,这里就不多做说明了。 分析到这一步,你是否发现一个问题?那就是如果我们按照同样的语法修改或者增删一个语句,是否就可以实现对程序的修改了呢?答案是肯定的。 例如,我们希望这个APK程序在运行时会弹出一个Toast,提示它被破解了。用Java的话,应该这样表述: Toast.makeText(this, "I'm Cracked!", Toast.LENGTH_LONG).show();
而用Java汇编的话,则应该表述为这样: const-string v0, "I\'m Cracked!" const/4 v1, 0x1 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
OK,只要我们将这段代码插入到原来程序的OnCreate中,再重新打包程序,我们就能实现在这个程序运行时弹出Toast了。 改之后的代码,大致如下: # virtual methods .method public onCreate(Landroid/os/Bundle;)V .locals 2 .parameter "savedInstanceState"
.prologue .line 11 invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
.line 12 const/high16 v0, 0x7f03
invoke-virtual {p0, v0}, Lcom/zh_weir/helloworld/MainActivity;->setContentView(I)V
.line 14 const-string v0, "I\'m Cracked!"
const/4 v1, 0x1
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 15 return-void .end method
重新编译打包签名 修改完成后,我们就可以对这个文件夹进行编译打包了。同样,我们使用的工具是apktool。通过命令apktool b HelloWorld,就可以实现程序编译打包了。这时会在这个文件夹下生成两个文件夹:存放中间文件的文件夹build和存放最后的apk文件的文件夹dist。 如果一切顺利的话,你就可以在dist文件夹中看到我们修改后的HelloWorld.apk了。不过需要注意的是,这个APK文件是还没有签名的,所以无法安装运行。我们还需要进行最后一步,那就是对这个APK进行签名。 签名我们需要用到的工具是Auto-sign。它主要是利用批处理命令,使用signapk.jar对APK文件进行签名的。你可以用记事本打开Sign.bat,看看它的具体调用关系。关键如下: java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk
OK!到此,我们对这个APK的Crack就结束了。现在在模拟器或者Android机器上安装上签好名的APK程序,运行试试。一切与我们的预期相同~ 如何反破解 这篇文章本来到此就结束了。不过,对于软件安全来说,有攻就要有防才对。不然,Android整个产业链就会被这样的Crack给毁掉。由于篇幅有限,反破解方面就不做详细描述了,仅仅做一个思路上的说明,希望大家谅解。 第一种办法:将核心代码用JNI写进so库中。由于so库的反编译和破解的难度加大,所以这种方式防止反编译效果不错。缺点是,对于Java层的代码没有保护作用,同样可以被篡改。 第二种办法:在线签名比较。在程序初始化时,联网将运行的程序的签名与服务器上的官方标准签名进行比较,从而达到让反编译后的程序无法正常运行的效果。缺点是,如果此部分联网检验的代码被篡改跳过,则整套机制失效。 第三种办法:代码混淆。为了加大反编译后代码分析的难度,对代码进行混淆。缺点是,治标不治本,同样可以修改(甚至据说还有反混淆工具,没用过,不多做评论)。 这三种办法都有各自的缺点,所以单单靠某一项要实现完美的软件保护都是不可能的。不过,我们可以采用联合几种办法的方式,来增强软件保护的力度。曾经反编译过Android版的卡巴斯基,它的保护思路似乎是这样的: 代码混淆,那是必须的,不过不指望它能有很好的效果。在程序初始化时,就直接通过JNI的so库初始化程序。程序激活部分也是通过JNI联网下载文件,然后在JNI层读文件并做相应激活与否的判断的。 卡巴斯基是将大部分功能模块都放在JNI层来实现的,如果我们的程序都这样处理,耗费的精力必然很大。所以,我们只是借鉴它的思路而已。具体操作思路如下: 代码混淆。初始化时JNI层联网验证签名。验证失败则直接在JNI层退出程序。值得注意的是需要保证如果绕过JNI层的初始化,则程序无法正常启动。这点不保证的话,破解还是很容易…… 转自:
发表评论
-
service学习
2012-05-16 00:41 883http://www.cnblogs. ... -
InputStream,String,File相互转化
2012-05-14 23:32 12701. String --> InputStream ... -
转:实现类似手机QQ的可折叠固定标题列表
2012-04-12 19:05 1388http://douzifly.cnblog ... -
转:[Android]倒影效果的ImagView
2012-04-06 23:29 1381本文源自:http://blog.csdn.net/ke ... -
转:JDK中的URLConnection参数详解
2012-04-06 23:01 1177针对JDK中的URLConnection连 ... -
转:Game Engines for Android (Android游戏引擎)
2012-03-24 13:12 2722With Google IO fast approach ... -
做Android 系统/应用开发怎么可以不懂自动化测试
2012-03-22 15:02 1150http://blog.csdn.net/yiyaaixuex ... -
让Qt应用程序跑在Android上
2012-03-22 14:55 1362http://blog.c ... -
转:在android 2.3 AVD 模拟器上安装 google market 安卓市场
2012-03-22 14:29 1084http:// ... -
增加 addDataScheme("file") 才能收到SD卡插拔事件的原因分析 -- 浅析android事件过滤策略
2012-03-22 14:26 1961... -
转:andengine中的ParticleSystem
2012-01-18 11:08 1529看ParticleSystemSimpleExample,看得 ... -
test4:腾讯
2011-12-26 20:27 2www.qq.com -
test3:Yahoo
2011-12-26 20:25 2www.yahoo.com -
test2:google
2011-12-26 10:53 5www.google.com.hk -
test1:百度
2011-12-26 10:52 6www.baidu.com -
转:android 打包自己的自定义组件成JAR包
2011-12-24 11:54 1275http://www.cnblogs.c ... -
转:AndEngine中的字体加载及应用
2011-12-15 15:39 1548AndEngine中的字体加载及应用 An ... -
转:Android游戏框架AndEngine使用入门
2011-12-13 14:24 1580项目站点:http://www.andengine.org 项 ... -
转:notification更新数字的显示及AnimationDrawable的结合使用
2011-12-07 10:25 2617这是本人加入博客园的首篇博文,自己平常在工作学习过程遇 ... -
转:Android系统上(mv不可用)cp命令的替代方法
2011-11-30 18:32 9669Android系统上cp命令 ...
相关推荐
Apk protect Apk保护
crack apk test,not test not test
4. **APK文件**:压缩包中的"Crack-AutomateIt.Pro.v.4.1.173.b.1173.apk"是这款应用的安装包。"AutomateIt"是一个知名的安卓自动化工具,提供了一系列的脚本语言和图形化界面,让用户无需编程知识也能创建复杂的...
总之,《Android-Crack-Tool For Mac_V2.5》是一款强大且全面的Android逆向分析平台,它将多个实用工具整合在一起,大大简化了在Mac环境下进行APK分析的工作流程,是Android开发和安全研究领域的重要辅助工具。
TikTok_23.5.0_Crack.ipa
CrackMe博客的附件https://blog.csdn.net/m0_38076341/article/details/115767335
标题中的“pk 加固工具apkprotect android 防止反编译”指的是ApkProtect,这是一款专为Android APK应用提供安全保护的工具。它的主要功能是通过一系列的技术手段增强APK的安全性,防止恶意用户对其进行反编译、调试...
一、反编译Apk得到Java源代码 首先要使用到下载的这两个工具:dex2jar和JD-GUI,前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工 具,可以直接查看Jar包的源代码。 具体步骤: 首先将apk文件,将...
TikTok_26.5.0.ipa
apk解包和封包工具apktool 2.3.4版本; dex2jar、jd-gui及backsmali代码逆向分析工具; signapk等签名工具集合; jadx-gui去壳分析工具及非root设备导出文件工具。
hfss15_win32crack 破解软件
z4root的apk文件,我用这个成功root了我的手机;与大家分享一下下!
解压后的“3.apk”文件应当是待调试的应用,而“crack.html”可能是破解或解决方案的提示,或者只是一个测试背景说明。 总之,掌握Android SO动态调试技术对于深入理解Android应用的工作原理、解决复杂问题以及进行...
使您的apk在Android 6.0下可用于Charles / Fiddler调试的工具 要求 杰克 确保jarsigner起作用 提琴手/查尔斯 如何使用 我们可以在GUI,命令行,库中使用它下载最新的版本。 图形用户界面 java -jar ApkCrackUI.jar ...
开发者通常会采用各种技术手段来防止恶意篡改、逆向工程和调试,如使用ProGuard进行代码混淆,限制不必要的权限请求,使用AES等加密算法保护敏感数据,以及对APK进行数字签名以确保其完整性和来源。 开源项目...
在IT行业中,AndroidCrackTool for mac是一款专为Mac用户设计的apk反编译工具,其主要功能是帮助开发者或安全研究人员对Android应用进行逆向工程操作,以便于理解应用程序的工作原理、查找潜在的安全漏洞或者进行二...
Offline Android API Reference(离线Android API参考)破解版 应用程序包含6500+(300+个包)的Android类信息,并且已经支持API等级28(Android 9.0) 破解教程:...
然而,有一些开发者或研究者可能出于调试、学习或者逆向工程的目的,需要对Unity编译出的APK或EXE进行反编译。"Unity反编译"是指尝试恢复Unity项目中的原始代码和资源的过程。这通常涉及到对二进制文件的解包、反...
非常好用的VS集成插件 # Integration 集成 * General Integration Notes 综述 * Tabbed Documents Support 标签式浏览 # Explorer Tools 浏览工具 * The Project Explorer 项目浏览器 * The Code Flow ...
典型的反编译流程包括,如何从apk反编译得到java源代码,如何从apk转换出dex文件,如何从dex文件转换出jar文件,如何从jar文件转换出java源代码等等原理和详细步骤。且总结了和安卓反编译、逆向工程、分析等相关的...