-
-
[原创]第一题解题思路
-
发表于: 2015-1-23 17:18 2102
-
1. 首先下载APK,解压出来,提取classes.dex, 然后利用dex2jar反编译一下。
# dex2jar.bat classes.dex
2. 使用jd-gui查看,发现有两个函数getTableFromPic和getPwdFromPic反编译失败,如下代码:
但是,幸运的是这两个都有日志输出。
3. 打开模拟器,启动logcat, 获取日志内容,发现得到的table和pw都是乱码,于是将日志输出到文件,敲入一下命令:
然后就得到真正的数据,如下所示:
4. 然后仔细看了一下加密算法,非常简单,于是就写了一个你算法出来,如下:
运行之后,得到密码:
# dex2jar.bat classes.dex
2. 使用jd-gui查看,发现有两个函数getTableFromPic和getPwdFromPic反编译失败,如下代码:
String str2 = MainActivity.this.getTableFromPic(); String str3 = MainActivity.this.getPwdFromPic(); Log.i("lil", "table:" + str2); Log.i("lil", "pw:" + str3);
但是,幸运的是这两个都有日志输出。
3. 打开模拟器,启动logcat, 获取日志内容,发现得到的table和pw都是乱码,于是将日志输出到文件,敲入一下命令:
# adb logcat > c:\1.txt
然后就得到真正的数据,如下所示:
String str2 = "一乙二十丁厂七卜人入八九几儿了力乃刀又三于干亏士工土才寸下大丈与万上小口巾山千乞川亿个勺久凡及夕丸么广亡门义之尸弓己已子卫也女飞刃习叉马乡丰王井开夫天无元专云扎艺木五支厅不太犬区历尤友匹车巨牙屯比互切瓦止少日中冈贝内水见午牛手毛气升长仁什片仆化仇币仍仅斤爪反介父从今凶分乏公仓月氏勿欠风丹匀乌凤勾文六方火为斗忆订计户认心尺引丑巴孔队办以允予劝双书幻玉刊示末未击打巧正扑扒功扔去甘世古节本术可丙左厉右石布龙平灭轧东卡北占业旧帅归且旦目叶甲申叮电号田由史只央兄叼叫另叨叹四生失禾丘付仗代仙们仪白仔他斥瓜乎丛令用甩印乐"; String str3 = "义弓么丸广之";
4. 然后仔细看了一下加密算法,非常简单,于是就写了一个你算法出来,如下:
import java.io.UnsupportedEncodingException; public class jekkay_1 { private static byte[] aliCodeToBytes(String paramString1, String paramString2) { byte[] arrayOfByte = new byte[paramString2.length()]; for (int i = 0; ; i++) { if (i >= paramString2.length()) return arrayOfByte; arrayOfByte[i] = ((byte)paramString1.indexOf(paramString2.charAt(i))); } } private static String bytesToAliSmsCode(String paramString, byte[] paramArrayOfByte) { StringBuilder localStringBuilder = new StringBuilder(); for (int i = 0; ; i++) { if (i >= paramArrayOfByte.length) return localStringBuilder.toString(); localStringBuilder.append(paramString.charAt(0xFF & paramArrayOfByte[i])); } } public void fun_1() { String str1 = "1"; String str2 = "一乙二十丁厂七卜人入八九几儿了力乃刀又三于干亏士工土才寸下大丈与万上小口巾山千乞川亿个勺久凡及夕丸么广亡门义之尸弓己已子卫也女飞刃习叉马乡丰王井开夫天无元专云扎艺木五支厅不太犬区历尤友匹车巨牙屯比互切瓦止少日中冈贝内水见午牛手毛气升长仁什片仆化仇币仍仅斤爪反介父从今凶分乏公仓月氏勿欠风丹匀乌凤勾文六方火为斗忆订计户认心尺引丑巴孔队办以允予劝双书幻玉刊示末未击打巧正扑扒功扔去甘世古节本术可丙左厉右石布龙平灭轧东卡北占业旧帅归且旦目叶甲申叮电号田由史只央兄叼叫另叨叹四生失禾丘付仗代仙们仪白仔他斥瓜乎丛令用甩印乐"; String str3 = "义弓么丸广之"; try{ int i ; for(i = 0 ;i < str3.length(); i ++){ int number = str2.indexOf(str3.charAt(i)); System.out.println(number+":"+(char)(number)); } String str4 = this.bytesToAliSmsCode(str2, str1.getBytes("utf-8")); if ((str3 != null) && (!str3.equals("")) && (str3.equals(str4))) { System.out.print("None"); return; } }catch (UnsupportedEncodingException localUnsupportedEncodingException) { } } public String int2string(int a){ String t = String.valueOf(a) ; if(t.length() == 1) return "00000" + t ; if(t.length() == 2) return "0000" + t ; if(t.length() == 3) return "000" + t ; if(t.length() == 4) return "00" + t ; if(t.length() == 5) return "00000" + t ; return t ; } public void fun_2(){ System.out.println("1: " + this.int2string(1)); System.out.println("10: " + this.int2string(10)); System.out.println("230: " + this.int2string(230)); System.out.println("102: " + this.int2string(102)); System.out.println("013: " + this.int2string(013)); } public static void main(String[] args){ jekkay_1 p = new jekkay_1(); p.fun_1() ; } }
运行之后,得到密码:
53:5 56:8 49:1 48:0 50:2 54:6 581026
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
看原图
赞赏
雪币:
留言: