Android逆向实例笔记—续力破解三个Android程序
这个首先感谢鱼C论坛的cbs大神,我是看了他的视频。自己再动手破解他给出这三个小程序。真心这样无私把技术分享给大家的人真的不多。再次感谢他。这里我就我自己破解的三个小程序自己做做笔记吧,方便自己以后查看,也方便刚刚入门的童鞋。这些都是些没啥技术含量的东西,大神请飘过。如果不能发这些东西,管理就直接删吧,记得告诉我,以后我会注意的。一、认识新工具这里我先给出一个新的工具。jeb。给个我找的。分别有32和64的。https://yunpan.cn/cMuBpvug7qjc2访问密码 da4a还是照例给个样图http://img.blog.csdn.net/20160824212829108?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
二、Crackme031.查看原apk还是拖拽到蓝叠里面看看吧。http://img.blog.csdn.net/20160824213332273?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
http://img.blog.csdn.net/20160824213337273?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
我们看到错误的提示是Bad boy。那就让我们开心的打开apkIDE吧2.反编译反编译之后打开strings.xml。发现,没有Bad boy。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Android Crackme03 - </string>
<string name="app_name2">About Crackme03</string>
<string name="textoPrueba2">This is the third crackme of the Android collection crackmes, in this, the crackme take another phone values and with our name make something. For this reason, the crackme dont run in the emulator, only in the phone. Good luck for all!.</string>
<string name="textodeurus">by deurus </string>
<string name="imei" />
<string name="temp">Enter Name</string>
<string name="labelserial">Enter Serial</string>
<string name="line">--------------------------------------</string>
</resources>那我们就只能看看smali里面的东西了。
搜索结果只有一处,还好。http://img.blog.csdn.net/20160824213837637?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
双击过去,并往上找跳转。结果发现,这代码有混淆。没有办法了?这个时候就该我们的jeb上了。http://img.blog.csdn.net/20160824214200901?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
点击File-Open,然后选择我们的Crackme03。然后点到Decompiled Java选项卡。双击左边的HelloAndroid。我们惊喜的发现这不是源码么?package com.example.helloandroid;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.View$OnClickListener;
import android.widget.TextView;
import android.widget.Toast;
public class HelloAndroid extends Activity {
private View$OnClickListener pulsarBoton;
private View$OnClickListener pulsarBotonabout;
public HelloAndroid() {
super();
this.pulsarBotonabout = new View$OnClickListener() {
public void onClick(View v) {
HelloAndroid.this.setContentView(2130903041);
Intent v0 = new Intent();
v0.setClass(HelloAndroid.this, prueba2.class);
HelloAndroid.this.startActivity(v0);
HelloAndroid.this.finish();
}
};
this.pulsarBoton = new View$OnClickListener() {
public void onClick(View v) {
String v10 = HelloAndroid.this.findViewById(2131034116).getText().toString();
int v11 = v10.length();
String v12 = "";
String v15 = HelloAndroid.this.findViewById(2131034118).getText().toString();
if(v11 >= 4) {
goto label_29;
}
try {
Toast.makeText(HelloAndroid.this.getApplicationContext(), "Min 4 chars", 1).show
();
return;
label_29:
int v5;
for(v5 = 0; v5 < v10.length(); ++v5) {
v12 = String.valueOf(v12) + v10.charAt(v5);
}
v12 = String.valueOf(Integer.parseInt(v12.substring(0, 5)) ^ 438294);
Object v8 = HelloAndroid.this.getSystemService("phone");
String v6 = ((TelephonyManager)v8).getDeviceId();
String v16 = ((TelephonyManager)v8).getSimSerialNumber();
String v19 = v6.substring(0, 6);
if(!String.valueOf(v12) + "-" + String.valueOf(((long)(Integer.parseInt(v19) ^ Integer
.parseInt(v16.substring(0, 6))))) + "-" + v19.equals(v15)) {
goto label_114;
}
Toast.makeText(HelloAndroid.this.getApplicationContext(), "God boy", 1).show();
return;
label_114:
Toast.makeText(HelloAndroid.this.getApplicationContext(), "Bad boy ", 1).show();
return;
}
catch(Exception v22) {
Toast.makeText(HelloAndroid.this.getApplicationContext(), "Another Error Ocurred :("
, 1).show();
return;
}
}
};
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(2130903040);
Object v3 = this.getSystemService("phone");
String v2 = ((TelephonyManager)v3).getDeviceId();
new TextView(((Context)this));
this.findViewById(2131034112).setText("HardwareID 01: " + v2);
String v5 = ((TelephonyManager)v3).getSimSerialNumber();
new TextView(((Context)this));
this.findViewById(2131034113).setText("HardwareID 02: " + v5);
String v8 = v2.substring(0, 6);
String v9 = v5.substring(0, 6);
Integer.parseInt(v8);
Integer.parseInt(v9);
new TextView(((Context)this));
this.findViewById(2131034116).setText("");
this.findViewById(2131034120).setOnClickListener(this.pulsarBotonabout);
this.findViewById(2131034119).setOnClickListener(this.pulsarBoton);
}
}http://img.blog.csdn.net/20160824214807872?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
其实不是哈。只是很类似了。而已。其实,这里的话,我们也可以不用jeb哈。直接用apkIDE带一个东西。http://img.blog.csdn.net/20160824214554506?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
点击打开,选择打开。也是一样的http://img.blog.csdn.net/20160824214640085?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
让我们来看看代码。
我们很容易的发现Bad boy,上面有God boy。猜测就知道这就是正确信息。http://img.blog.csdn.net/20160824215101747?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
那就让我们看看这代码。我们发现上面有个 goto label_114;就从这个就跳转到Bad boy。那么我们就得让它不跳转,对吧。大致知道那里之后回到apkIDE。
我们往上找语句块,发现了 :cond_2那我们搜索这个。到了这里就是我们之前看到的那个跳转。http://img.blog.csdn.net/20160824223358518?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
OK,我们果断改为nez,保存,生成。3.验证拖拽到蓝叠,打开。不错,God boy和我们见面http://img.blog.csdn.net/20160824223651191?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
这个我们就是KO了。三、CrackMe-F1F21.查看原apk
无需多说,进蓝叠http://img.blog.csdn.net/20160824224046441?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
这不是是写的EditView,居然不是hint属性,表示无语。懂的就懂,不懂也不重要。这里扯远了,我们继续。既然有东西,我就懒得输了。直接验证http://img.blog.csdn.net/20160824224312256?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
我们知道了错误代码就是Lisence Uncorrect.。2.反汇编apkIDE,常规操作。照样,string.xml没有信息。只有smali里面搜索一波。http://img.blog.csdn.net/20160824224504851?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
双击过去。找找跳转。这里给出代码
还是一片大乱,还是用jeb。
http://img.blog.csdn.net/20160824230444926?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
看我框出来的地方。很显然,如果前面不等于后面这一段,那么就跳转到下面去,Toast出来错误。OK,我们回到smali里面,去找这个跳转。其实大胆一点,我们直接可以在错误的上面看到:cond_4。然后搜素这个,但是我们还是稳一点,看看类似的源码,找找思路。搜索:cond_4,双击过去http://img.blog.csdn.net/20160824231333453?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
ne就是等于,那我们改成等于就OK了。eq改上。3.验证保存,生成apk。拖蓝叠。http://img.blog.csdn.net/20160824231600723?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
又是我们熟悉又激动的正确Toast。四、EX05_01_1.原apk不废话,上蓝叠。看看错误提示http://img.blog.csdn.net/20160825104817903?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
这里是直接不用输什么,直接来error--
2.反编译来看看我们的apkIDE怎么说。http://img.blog.csdn.net/20160825105036534?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
不用多想。依然那个问题。string没信息。那我们就搜索error--看看http://img.blog.csdn.net/20160825105209611?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
只有一处结果就是极好的,双击过去找跳转。显然没有什么可用信息。还是看看类源码吧。package irdc.ex05_01;
import android.text.util.Linkify;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.TextView;
import android.widget.Toast;
class EX05_01$1
implements View.OnKeyListener
{
EX05_01$1(EX05_01 paramEX05_01) {}
public boolean onKey(View paramView, int paramInt, KeyEvent paramKeyEvent)
{
if ("gogo".equals("11"))
{
EX05_01.access$0(this.this$0).setText("gogo");
Toast.makeText(this.this$0, "right++", 1).show();
}
for (;;)
{
Linkify.addLinks(EX05_01.access$0(this.this$0), 7);
return false;
EX05_01.access$0(this.this$0).setText("gogo");
Toast.makeText(this.this$0, "error--", 1).show();
}
}
}
这个很清晰明了。代码很少,而且可以看到思路的地方。
http://img.blog.csdn.net/20160825105501145?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
我们知道,意思就是“gogo”等于“11”才会跳转到正确的地方。但是怎么可能“gogo”等于“11”呢。这里我们就直接修改为不等于就OK了。回到apkIDE,找到跳转到错误的地方。http://img.blog.csdn.net/20160825105713884?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
那么就直接把eqz改为nez。让它不等于http://img.blog.csdn.net/20160825105810505?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
3.验证保存,生成,拖蓝叠。
http://img.blog.csdn.net/20160825110048435?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
打完收工!!!
这三个app都不是很难。但是主要的目的就是练练手,然后去理理思路。看我写的辛苦,就赏脸给点热心吧!!!{:301_1004:}还是最后给出三个apk下载地址吧https://yunpan.cn/cMu6crr4vXq5t访问密码 21bc
1731300623 发表于 2016-8-31 11:10
链接:http://pan.baidu.com/s/1mh7ULFM 密码:614h
这位兄台可以看看这个app怎么破解
无中文我也是个小 ...
加壳了么? 链接:http://pan.baidu.com/s/1mh7ULFM 密码:614h
这位兄台可以看看这个app怎么破解
无中文我也是个小白不会你看看怎么搞 学习了,支持楼主! 不错,我来练练新工具 shmwyd 发表于 2016-8-25 11:22
不错,我来练练新工具
这个帖子我工具没咋写。我昨天有个帖子,写的很详细的工具使用! 希望这个系列教程能写下去 谢谢分享支持原创作品。 先收藏着,改天再来好好学习一下 今天的最后一分了,感谢楼主分享!!学习学习。{:1_893:} 多谢分享,学习啦!