吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 19708|回复: 40
收起左侧

[Android 原创] 一枚KeyGenMe分析

  [复制链接]
Ericky 发表于 2016-1-3 19:12
KM的下载地址:
将自己的分析过程分享给大家。
答案是:hello2016,先贴张图:
图片1.png
接下来是技术交流:
1.unpack so (dump)so
So被加过Naga的壳,具体脱壳过程在我这篇文章里有写:
2.脱完壳之后的分析
check函数里面:
图片2.png
可以看到最后对比的字符串为:XVccAwVbVQQE
我们从最后开始往前推到。
转换成相对应的Hex如下:
0x58 0x56 0x63 0x63
0x41 0x77 0x56 0x62
0x56 0x51 0x51 0x45
这些Hex的值怎么算出来的呢?继续往前看:
base64encode函数中:
图片3.png
一共12个值,通过num2base64char函数,循环3次,每次4个值。
进入num2base64char函数里看算法:
图片4.png
贴一段转换后的java代码:
[Asm] 纯文本查看 复制代码
 public static int NumToChar(int a1){
		 {
			 int v2 ;
			  if ( a1 <= 0x19 ) //65到90
			    return (a1 + 65);
			  if ( a1 <= 0x33 )//
			    return (a1 + 71);//71到122
			  if ( a1 <= 0x3D )//61-4
			    return (a1 - 4);
			  v2 = 43;
			  if ( a1 != 62 )
			  {
			    if ( a1 == 63 )
			    {
			      v2 = 47;
			    }
			    else if ( a1 == 64 )
			    {
			      v2 = 61;
			    }
			  }
			  return v2;
			}
根据这段算法逆推出Numtochar之前的Hex:
0x17 0x15 0x1c 0x1c
0x00 0x30 0x15 0x1b
0x15 0x10 0x10 0x04

继续向前看,找出这12Hex的值是如何来的:
图片5.png
图中红框的函数为关键函数,进去看一下:
图片6.png
传入3个参数,生成了4个结果。所以之前的12Hex的值应该是33位的Hex值生成的,根据算法,解密程序如下:
[Asm] 纯文本查看 复制代码
int x ,y ,z ,four1,four2,four3,four4;
		for(x=0;x<=0xff;x++){
			for(y=0;y<=0xff;y++){
				for(z=0;z<=0xff;z++){
					four1 = x>>2;
					four2 = (16 * x & 0x30) + (y >> 4);
					four3 = (4 * y & 0x3C) + (z >> 6);
					four4 = z & 0x3F;
					if(four1==0x15 && four2==0x10 &&  four3==0x10 && four4==0x04){
						System.out.println("X:0x"+Integer.toHexString(x)+" Y:0x"+Integer.toHexString(y)+" Z:0x"+Integer.toHexString(z));
					}
				}
			}
		}

                }
解密后得出33位的Hex值如下:
0x5d 0x57 0x1c
0x03 0x05 0x5b
0x55 0x04 0x04
再往前就是java层了:只要传入的字符串为以下Hex则成功:
16进制:5d 57 1c 03 05 5b 55 04 04
   | |
   | |
  __  __
   \ /
   \/
         
  JAVA
JAVA层的加密函数为:
[Asm] 纯文本查看 复制代码
 public static String Encrpt(String arg9, String arg10) {
	        String v0_2;
	        String v1 = null;
	        if(arg9 != null && arg10 != null) {
	            try {
	                char[] v2 = arg10.toCharArray();
	                char[] v3 = arg9.toCharArray();
	                int v4 = v3.length; //v4 =9
	                int v5 = v2.length;
	                char[] v6 = new char[v4];
	                int v0_1;
	                for(v0_1 = 0; v0_1 < v4; ++v0_1) {
	                	System.out.println((int)(v3[v0_1])+" ^ "+(int)v2[v0_1 % v5]);
	                    v6[v0_1] = ((char)(v3[v0_1] ^ v2[v0_1 % v5]));
	                }

	                v0_2 = new String(v6);
	            }
	            catch(Exception v0) {
	                v0.printStackTrace();
	                v0_2 = v1;
	            }
	        }
	        else {
	            v0_2 = v1;
	        }
	        return v0_2;
	    }
		public static String toHexString(String s) {
			String str = "";
			for (int i = 0; i < s.length(); i++) {
				int ch = (int) s.charAt(i);
				String s4 = Integer.toHexString(ch);
				System.out.println((i+1)+": 0x"+s4);
				str = str + s4;
			}
			return str;
		}
运算都是异或加密,逆运算就是结果与key再异或回来,而keyJava层已经可以知道,为”52pojie”,所以异或回来的答案如下:
Answer:104 101 108 108 111 50 48 49 54
最后再查一下ASCII码表得出答案为:hello2016
到此整个分析就结束了,最后验证了下,是标准的base64,并没有做改动,所以完成这道题可以更简单,但是如果做了变形base64,那么这种方法才是通用的了。(*^__^*)
2016.1.3
By Ericky



免费评分

参与人数 7热心值 +7 收起 理由
lawlier + 1 谢谢@Thanks!
yyyz + 1 谢谢@Thanks!
deegar + 1 热心回复!
noblesport + 1 我很赞同!
pojie668 + 1 谢谢@Thanks!
玩世不攻 + 1 热心回复!
spguangz + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Ericky 发表于 2016-1-3 20:32
世事繁华皆成空 发表于 2016-1-3 19:20
你居然还是分析的之前的版本啊,我的key改了啊啊啊啊啊啊啊啊啊啊啊啊

不知道啊。。我就2个版本啊  有个是中文的。。
 楼主| Ericky 发表于 2016-1-3 20:33
世事繁华皆成空 发表于 2016-1-3 19:20
你居然还是分析的之前的版本啊,我的key改了啊啊啊啊啊啊啊啊啊啊啊啊

中文的key 都是 76啊 。。
qtfreet00 发表于 2016-1-3 19:20
你居然还是分析的之前的版本啊,我的key改了啊啊啊啊啊啊啊啊啊啊啊啊
头像被屏蔽
-Zing- 发表于 2016-1-3 19:26
那逗逼不是H大妈?

点评

我去你这么被ban了?  发表于 2017-1-10 22:00
cool147852369 发表于 2016-1-3 19:28
学习了 表示回去好好努力
夜之零落兮 发表于 2016-1-3 19:30
前排抱花生米围观
Niuer 发表于 2016-1-3 19:32
前排卖瓜
一生情独醉 发表于 2016-1-3 20:06
还在学习的路上,虽然看不怎么懂,围观!
smile1110 发表于 2016-1-3 20:25
世事繁华皆成空 发表于 2016-1-3 19:20
你居然还是分析的之前的版本啊,我的key改了啊啊啊啊啊啊啊啊啊啊啊啊

那都比不是h大嘛
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 22:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表