|
本帖最后由 ChongZi 于 2015-12-13 16:11 编辑
13526267303 密码111111 &password=343434343434&mobile=3436303733373332363536
在某群看到有网友发出来这样的话,进行分析对比
111111
343434343434
1 3 5 2 6 2 6 7 3 0 3
34 36 30 37 33 37 33 32 36 35 36
通过上边对比,其实可以发现
加密方式大致相同
1=34(其实,由此可以联想到ASCII,大家都会想到,34属于16进制。10进制等于52)
ascii在线查询工具 http://www.qqxiuzi.cn/bianma/ascii.htm
通过对比,发现其实1加密之后是等于4的ASCII
继续查询3,3加密之后是36,转换为10进制是56
通过对比,发现其实3加密之后是等于6的ASCII
思考一下,这2者之间有什么联系呢?
1,4
3,6
可能这样,大家看不出来什么,那我们换一种形式
0001,0100 (1,4)
0011,0110(3,6)
根据异或来进行运算(这个可能是我的一个毛病,简单的加密我就只会想到异或)
相同等于0,不同等于1
0001,0100 (1,4)=0101(5)
0011,0110(3,6)=0101(5)
用易语言测试一下
调试输出 (位异或 (1, 4 )) 调试输出 (位异或 (3, 6 ))
看来猜想是对的
那么换句话说,这个加密,就是通过把每一个数字,和5进行异或,然后取ASCII即可!
那接下就只是写代码的时间了
变量名 | 类 型 | 静态 | 数组 | 备 注 | Utf8字节 | 字节集 | | | 计次 | 整数型 | | | 当前字节 | 整数型 | | | 最后结果 | 文本型 | | |
Utf8字节 = 编码_Ansi到Utf8 (编辑框1.内容 )计次循环首 (取字节集长度 (Utf8字节 ), 计次 )当前字节 = Utf8字节 [计次 ]最后结果 = 最后结果 + 十到十六 (位异或 (当前字节, 5 )) 计次循环尾 ()如果真 (取文本长度 (最后结果 ) % 2 = 1 )最后结果 = 取文本左边 (最后结果, 取文本长度 (最后结果 ) - 1 )编辑框2.内容 = 最后结果返回 (取十六进制文本 (十进制数 )) |
编码_Ansi到Unicode | 字节集 | | |
Ansi | 文本型 | | | | 非标准Unicode编码 | 逻辑型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 数据2 | 字节集 | | | 长度 | 整数型 | | | 如果真 (Ansi = “”)返回 ({ })长度 = MultiByteToWideChar (936, 0, Ansi, -1, { }, 0)数据2 = 取空白字节集 (长度 × 2 )MultiByteToWideChar (936, 0, Ansi, -1, 数据2, 长度 × 2 )如果真 (非标准Unicode编码 )数据2 = 取字节集左边 (数据2, 取字节集长度 (数据2 ) - 2 )返回 (数据2)|
编码_Ansi到Utf8 | 字节集 | | |
ansi文本 | 文本型 | | | |
局_临时 = 编码_Ansi到Unicode (ansi文本 )返回 (编码_Unicode到Utf8 (局_临时 )) |
编码_Unicode到Utf8 | 字节集 | | |
Unicode字节集 | 字节集 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | utf8_len | 整数型 | | | unicode_len | | | | uft8 | 字节集 | | |
unicode_len = 取字节集长度 (Unicode字节集 ) ÷ 2 utf8_len = WideCharToMultiByte (65001, 0, Unicode字节集, unicode_len, uft8, 0, 0, 假)uft8 = 取空白字节集 (utf8_len )WideCharToMultiByte (65001, 0, Unicode字节集, -1, uft8, utf8_len, 0, 假)返回 (uft8 )
向作者索取了一份APP反编译的代码,进行了对比
其中 encryptWithXor 函数就是加密函数了
- public static String encryptWithXor(String paramString)
- {
- int i = 0;
- for (;;)
- {
- try
- {
- if (!TextUtils.isEmpty(paramString)) {
- continue;
- }
- paramString = null;
- }
- catch (Exception localException)
- {
- Object localObject;
- continue;
- }
- return paramString;
- localObject = paramString.getBytes("UTF-8");
- if (i < localObject.length)
- {
- localObject[i] = ((byte)(localObject[i] ^ 0x5));//核心代码
- i++;
- }
- else
- {
- localObject = a.a((byte[])localObject, 0, localObject.length);
- paramString = (String)localObject;
- }
- }
- }
复制代码
源码已经贴出来了!就到这里把
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|