ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Android 逆向】动态调试AliCrackme_1

2022-03-20 15:03:15  阅读:201  来源: 互联网

标签:lang 逆向 String Ljava StringBuilder v0 v2 Android AliCrackme


1 试玩 apk

# 安装APK到真机
adb install AliCrackme_1.apk
打开apk,投石问路,输入123试一下

image

2 将apk 拖入androidKiller,得到反编译的smali文件项目

smali目录地址在androidkiller目录下的projects/AliCrackme_1/Project 下

3 这里使用AndroidStudio3.5 进行动态调试

动态调试需要安装插件smalidea。插件地址为(androidstudio3.5和smalidea-0.05.zip搭配,使用smalidea更高版本会有问题),该插件支持smali断点debug模式

smaliidea下载地址,记得选0.05版本
image

4. androidstudio 安装该插件

image

5. 使用android studio 导入androidkiller目录下的projects/AliCrackme_1/Project,一路 next,会将smali项目导入

image

6. 在关键onClick处下断点,运行得到密码字典表

一乙二十丁厂七卜人入八九几儿了力乃刀又三于干亏士工土才寸下大丈与万上小口巾山千乞川亿个勺久凡及夕丸么广亡门义之尸弓己已子卫也女飞刃习叉马乡丰王井开夫天无元专云扎艺木五支厅不太犬区历尤友匹车巨牙屯比互切瓦止少日中冈贝内水见午牛手毛气升长仁什片仆化仇币仍仅斤爪反介父从今凶分乏公仓月氏勿欠风丹匀乌凤勾文六方火为斗忆订计户认心尺引丑巴孔队办以允予劝双书幻玉刊示末未击打巧正扑扒功扔去甘世古节本术可丙左厉右石布龙平灭轧东卡北占业旧帅归且旦目叶甲申叮电号田由史只央兄叼叫另叨叹四生失禾丘付仗代仙们仪白仔他斥瓜乎丛令用甩印乐

还有真正的但是被加密过的密码义弓么丸广之

image

关键加密转换算法,将我们输入的密码,比如123,根据密码字典转换,后面会和真正转换后的密码进行比较是否一致
.method private static bytesToAliSmsCode(Ljava/lang/String;[B)Ljava/lang/String;
    .locals 3
    .param p0, "table"    # Ljava/lang/String;
    .param p1, "data"    # [B

    .prologue
    .line 144
    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    .line 145
    .local v1, "sb":Ljava/lang/StringBuilder;
    const/4 v0, 0x0

    .local v0, "i":I
    :goto_0
    array-length v2, p1

    if-lt v0, v2, :cond_0

    .line 148
    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    return-object v2

    .line 146
    :cond_0
    aget-byte v2, p1, v0
	# 关键指令,将输入的char转换为int,比如 1 ASCII码对应的 50
    and-int/lit16 v2, v2, 0xff
	#转换后的值,去字典表里找对应的字符
    invoke-virtual {p0, v2}, Ljava/lang/String;->charAt(I)C

    move-result v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;

    .line 145
    add-int/lit8 v0, v0, 0x1

    goto :goto_0
.end method

6. 根据该算法,可以倒推出解密算法,将加密后的真正密码进行反解密

public static void main(String[] args) {
	String tableStr = "一乙二十丁厂七卜人入八九几儿了力乃刀又三于干亏士工土才寸下大丈与万上小口巾山千乞川亿个勺久凡及夕丸么广亡门义之尸弓己已子卫也女飞刃习叉马乡丰王井开夫天无元专云扎艺木五支厅不太犬区历尤友匹车巨牙屯比互切瓦止少日中冈贝内水见午牛手毛气升长仁什片仆化仇币仍仅斤爪反介父从今凶分乏公仓月氏勿欠风丹匀乌凤勾文六方火为斗忆订计户认心尺引丑巴孔队办以允予劝双书幻玉刊示末未击打巧正扑扒功扔去甘世古节本术可丙左厉右石布龙平灭轧东卡北占业旧帅归且旦目叶甲申叮电号田由史只央兄叼叫另叨叹四生失禾丘付仗代仙们仪白仔他斥瓜乎丛令用甩印乐";
	String pwdStr = "义弓么丸广之";
	char[] pwdIndex = new char[pwdStr.length()];
	for (int i = 0; i < pwdStr.length(); i++) {
		int index = tableStr.indexOf(pwdStr.charAt(i));
		pwdIndex[i] = (char)index;
	}
	System.out.println(new String(pwdIndex))
}

最后得到密码: 581026

标签:lang,逆向,String,Ljava,StringBuilder,v0,v2,Android,AliCrackme
来源: https://www.cnblogs.com/gradyblog/p/16030017.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有