有没有大佬给看下这段Java代码
看蒙圈了,刚学习入门,想试着找一个协议的加密,这段代码看蒙圈了,有大佬给解释下么,感谢。public class c {
public c() {
super();
}
private static a a() {
Object v0_1;
a v1 = null;
try {
v0_1 = e.a(a.class);
}
catch(Exception v0) {
ThrowableExtension.printStackTrace(((Throwable)v0));
a v0_2 = v1;
}
return ((a)v0_1);
}
private static String a(Context arg4, HashMap arg5) {
int v3 = 16;
if(arg5 == null) {
arg5 = new HashMap(v3);
}
long v0 = System.currentTimeMillis();
byte[] v1 = InnoSecureUtils.secureSo(arg4, c.a(arg4, arg5, c.a(arg5, v0), v0), com.jifen.open.biz.login.a.a.a().h());
String v0_1 = "";
if(v1 != null) {
v0_1 = Base64.encodeToString(v1, 2);
}
HashMap v1_1 = new HashMap(v3);
v1_1.put("qdata", v0_1);
v1_1.put("app_id", com.jifen.open.biz.login.a.a.a().b());
return n.a(v1_1);
}
private static String a(Context arg3, HashMap arg4, String arg5, long arg6) {
HashMap v0 = new HashMap(16);
v0.put("app_id", com.jifen.open.biz.login.a.a.a().b());
v0.put("time", Long.valueOf(arg6));
v0.put("sign", arg5);
v0.putAll(c.b(arg3, v0));
arg4.put("public_params", v0);
return n.a(arg4);
}
private static String a(HashMap arg5, long arg6) {
ArrayList v0 = new ArrayList(arg5.keySet());
Collections.sort(((List)v0), new Comparator() {
public int a(String arg3, String arg4) {
return arg3.toLowerCase().compareTo(arg4.toLowerCase());
}
public int compare(Object arg2, Object arg3) {
return this.a(((String)arg2), ((String)arg3));
}
});
StringBuilder v1 = new StringBuilder();
Iterator v2 = ((List)v0).iterator();
while(v2.hasNext()) {
Object v0_1 = arg5.get(v2.next());
if((v0_1 instanceof Boolean)) {
int v0_2 = ((Boolean)v0_1).booleanValue() ? 1 : 0;
v1.append(v0_2);
}
else {
v1.append(v0_1);
}
v1.append("#");
}
v1.append(com.jifen.open.biz.login.a.a.a().b());
v1.append("#");
v1.append(com.jifen.open.biz.login.a.a.a().c());
v1.append("#");
v1.append(arg6);
return com.jifen.framework.core.f.c.a(v1.toString());
}
public static void a(Context arg3, HashMap arg4, b arg5) {
c.a(com.jifen.open.biz.login.repository.b.d, null, c.a(arg3, arg4), arg5);
}
private static void a(String arg3, String arg4, String arg5, b arg6) {
a v0 = c.a();
if(v0 != null) {
v0.postString(arg3, null, arg5, new b(arg6) {
public void a() {
if(this.a != null) {
this.a.a();
}
}
public void a(Object arg1) {
this.a(((String)arg1));
}
public void a(String arg4) {
Object v0 = n.a(arg4, com.jifen.open.biz.login.repository.a.class);
if(v0 == null) {
if(this.a != null) {
this.a.a(new LoginApiException("网络返回异常,请稍后重试"));
}
}
else if(this.a != null) {
this.a.a(v0);
}
}
public void a(Throwable arg2) {
if(this.a != null) {
this.a.a(arg2);
}
}
});
}
}
private static void a(String arg3, String arg4, String arg5, b arg6, Class arg7) {
a v0 = c.a();
if(v0 != null) {
v0.postString(arg3, null, arg5, new b(arg7, arg6) {
public void a() {
if(this.b != null) {
this.b.a();
}
}
public void a(Object arg1) {
this.a(((String)arg1));
}
public void a(String arg4) {
Object v0 = n.a(arg4, new ParameterizedType() {
public Type[] getActualTypeArguments() {
return new Class[]{this.a.a};
}
public Type getOwnerType() {
return null;
}
public Type getRawType() {
return com.jifen.open.biz.login.repository.a.class;
}
});
if(v0 == null) {
if(this.b != null) {
this.b.a(new LoginApiException("网络返回异常,请稍后重试"));
}
}
else if(this.b != null) {
this.b.a(v0);
}
}
public void a(Throwable arg2) {
if(this.b != null) {
this.b.a(arg2);
}
}
});
}
}
private static HashMap b(Context arg3, HashMap arg4) {
arg4.put("app_version", d.a() + "");
arg4.put("app_version_name", d.b());
arg4.put("os", "android");
arg4.put("os_version", j.d());
arg4.put("tk", com.jifen.open.biz.login.e.a.a(arg3));
arg4.put("deviceCode", j.a(arg3));
arg4.put("network", r.a(arg3));
arg4.put("uuid", j.d(arg3));
return arg4;
} 不懂Java,也不想学习Java。C++才是真爱 你把代码复制到eclipse里,引用的地方都加上去,然后跑起来就知道了 Light紫星 发表于 2019-12-3 18:11
你把代码复制到eclipse里,引用的地方都加上去,然后跑起来就知道了
感谢大哥,我这就去试试,十分感谢,太感谢了。 本帖最后由 super-star 于 2019-12-3 18:25 编辑
不知道我猜的对不对
设:Map
第1个a方法:
暂时不详
第2个a方法:
拼接参数转base64,这个经过base64加密,我暂称为:暗文。(其实可以解密)
往Map里添加 qdata、app_id
第3个a方法:
参数1:Bundle
参数2:Map
参数3:时间戳
拼接明文参数,这个参数可以在url看到。
往Map里添加 public_params={app_id,time,sign}
第4个a方法:
参数1:Map
参数2:时间戳(或者指定字符串)
给Map的key排序,然后拼接url。如果是boolean类型转换成1:0,其它类型直接拼接(toString),可以理解为拼接Url
第5个a方法:
参数1:Bundle
参数2:Map
参数3:自定义的类,应该是请求回调类
目测是setXX一类的方法
第6个a方法:
参数1:url
参数2:未理解
参数3:请求参数?
参数4:感觉和方法5对应
就是http请求方法
第7个a方法:
感觉和第六个方法差不多
最后一个方法:
获取设备信息
仅供参考!!! super-star 发表于 2019-12-3 18:24
不知道我猜的对不对
设:Map
首先真的十分感谢,码这么多字来回答。
方法1,我是一点一点百度,大概意思应该是设定了引用类型,然后有一个异常检测。
方法2. 我没明白设置那个变量为16是几个意思(是数据结构算法吗)
最终目的是解密,但是还没有搞明白咋回事,解密就更别提了,暂时不敢想。
qdata、app_id这两个参数在抓包的时候抓到了,是一大堆的字母、++、\这些。
这部分也是最想看懂的,但是没明白他的加密逻辑。
方法3. 这里看了您的注解大概明白了。
方法4. ArrayList v0 = new ArrayList(arg5.keySet());这里写的是KEY的存放吗,这个keyset不太懂,也没搜索到。
方法5 还不懂,(问题在我,基础还没学好)看了您注解的我在一点一点找。
方法6、方法7。 应该是http的请求,还附带了一些网络异常的提示,大概意思明白了。
获取设备信息这里,TK代表的是啥呀,不是很明白。
最后真的感谢大佬码一堆字给解释,感谢。 梦迪丶 发表于 2019-12-3 19:14
首先真的十分感谢,码这么多字来回答。
方法1,我是一点一点百度,大概意思应该是设定了引用类型,然后 ...
16表示Map的初始大小,可以忽略不用管。
qdata可以百度:base64解密即可解出
keySet是Map的Key,map数据结构是:{key:value,key:value},就是一个钥匙对着一个值。keySet就是把所有钥匙取出来。
方法5应该是一个设值的方法。猜测但不一定(和最后一个b方法类似都是属于设置一些值)
tk你要看:com.jifen.open.biz.login.e.a.a 这个才知道。
Map你可以参考:https://www.cnblogs.com/sky903700252/p/8798309.html super-star 发表于 2019-12-3 19:37
16表示Map的初始大小,可以忽略不用管。
qdata可以百度:base64解密即可解出
POST https://passport-api.1sapp.com/captcha/sms HTTP/1.1
Content-Type: text/plain;charset=utf-8
Content-Length: 818
Host: passport-api.1sapp.com
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.11.0
{"qdata":"QzY3MDMyQzVFNEY3QTZFMUQyNzdDQkZBNURDQUI2NTQuY0dGeVlXMGZNV0prWkdZMVl6WXRORE0yWkMwME5HWXhMVGsxWkRBdE56aGhOV0kzT1RobFpqSXdIblpsY25OcGIyNGZOQjV3YkdGMFptOXliUjloYm1SeWIybGtIbVZqSHpFPS6O3F8MrImawW9Ah8I8WIO58Cqm8LKBl748uDtQFNifCMbahIQ4mG9hEYP5jDS++j5J0LqGqG0TddDl9Bvm7SIhyBdn/2KE/wxeqYA1NFhoYdeO5HO8hcLIjehErCG0xG+v+xeK+5UJzFUX9x918/VzryTNfPoUIRWnM/GlYFrMDg47HDBFC8HNJnanSr3mOs+39LZq77AqLxADZSlpGpuOwvbiXnImoIxycvY0XeFQmS8rlOmYgF698kvEb34aJ3adxMcK4GM0DSNlpTF8+8wK3I/7uUUlLH9eJ6UpTkWyRGUQjdMG3NavgclCafOpxCuriYtz17zjBnmROyHohuCHEP669lmUMgzK04ydpPls+ma3YIQPEJjUOu+gL6/zAt5opoHNQqRRUjqxG6y17rD3M6oUqOWEFXjgbe+tXeNhliMHDrNlZj5KxKcspYghMbs/9f3RJ35fKHTuvwGcTzeuExTXFi76lAySQAYVCB3TyXmz69mVLlXlOAQCEcWj9OvaDH6jdwkhs7leW1UqJEuzhhwkxMe9N6mUY2jdunTE5o2/AJT0QQcKLmPOC3DBAfa7+9xHppPknSoxAVIigpgrE6x0","app_id":"Miread.brows
这个是我抓的包,但是base64解密解不出来,我试了好多。 梦迪丶 发表于 2019-12-3 20:11
POST https://passport-api.1sapp.com/captcha/sms HTTP/1.1
Content-Type: text/plain;charset=utf-8
...
应该是多重加密了。
C67032C5E4F7A6E1D277CBFA5DCAB654.cGFyYW0fMWJkZGY1YzYtNDM2ZC00NGYxLTk1ZDAtNzhhNWI3OThlZjIwHnZlcnNpb24fNB5wbGF0Zm9ybR9hbmRyb2lkHmVjHzE=.ü_¬áo@Â<X1e*|e2¾<¸;PØÆú8oaù4¾ú>IDo¨muDåôæí"!ègÿbÿ^©54Xha×äs¼ ÂèèD¬!′Äoˉûû ìU÷uóõsˉ$í|ú!§3ñ¥`Zì;0Eáí&v§J½æ:Ï·ô¶jï°*/e)iÂöa^r& rrö4]áP/+é^½òKÄo~'vÄÇ
àc4
#e¥1|ûì
üû1E%,^'¥)NE2DeóüÖˉéBió©Ä+«s×¼ãy;!èàtoöY2êó¤ùlúf·`Ô:ï /ˉóTh|íB¤QR:±¬μî°÷3a¨åxàmï-]ãa#3ef>Jħ,¥!1»?õyÑ'~_(tî¿O7®×.ú@óéy3ëù.Uå8Å£ôëú~£w !31^[U*$K3$Äǽ7©chYotÄæ¿ôA
.cÎpáö»ûüG|ä*1R"+¬t super-star 发表于 2019-12-4 16:04
应该是多重加密了。
C67032C5E4F7A6E1D277CBFA5DCAB654.cGFyYW0fMWJkZGY1YzYtN ...
我真是太难了,搞了一天,没有什么头绪。打算先放下了,以后再拿出来搞。
页:
[1]