本篇文章仅供学习讨论。
文章中涉及到的代码、实例,仅是个人日常学习研究的部分成果。
如有不当,请联系删除。
阿里系的签名算法,一直让人好奇的心痒痒。所以在空的时候,都会去扣其逻辑,一边学习逆向,一边学习别人算法,也是其乐无穷了。
原来我写过一篇unidbg实现算法的文章,那个实现起来还是有点缺陷的。详见:
unidbg实现淘宝请求参数算法,实现脱离模拟器/手机请求淘宝、闲鱼_unidbg x-sign-CSDN博客
这次看了另一篇文章,实现阿里系的灯塔APP的算法,链接见:安卓逆向小案例——阿里系某电影票务APP加密参数还原-Unidbg篇_阿里系app逆向-CSDN博客
但是吧,作者公布出来的代码,可能某些地方做了调整,实现的并不是很完美,而且x-mini-wua是短的。研究过阿里系签名的同学们肯定知道短的x-mini-wua是无法请求到阿里的数据的。
帖出部分代码,以及实现效果:
public void getTimestampSign() {
String time = Utils.getTime();
ret = JNICLibrary.callStaticJniMethodObject(
emulator,
doCommandNative,
70102,
new ArrayObject(
new StringObject(vm, "23632979"),
new StringObject(vm, "Yl7Bnq3bwrgDACsiIRXKipG+&&&23632979&88bb23b6258b4ec22f9a4779b2b1c83c&" + time + "&mtop.common.gettimestamp&*&&10005894&AvH8ID-LlSsyBuvgEtWSp0OGnvcpTMm66qRu16fKJFxl&&&&27&&&&&&&"),
DvmBoolean.valueOf(vm, false),
DvmInteger.valueOf(vm, 0),
new StringObject(vm, "mtop.common.gettimestamp"),
new StringObject(vm, "pageId=&pageName="),
null,
null,
null
)
);
logger.info("GetTimestampSign -70102: " + ret.getValue().toString());
}
public void getSearchSign() {
String time = Utils.getTime();
ret = JNICLibrary.callStaticJniMethodObject(
emulator,
doCommandNative,
70102,
new ArrayObject(
new StringObject(vm, "23632979"),
new StringObject(vm, "ZCuO+m8fB+YDAClcCl032Z0Y&&&23632979&9ff29507b635f7f4788a13461c4161b8&" + time + "&mtop.alipictures.gravitywave.global.search.list&1.2&&227200&Aoa0WWLRy49ULUEXHr0oNc2VG90WzgAkGAFa1vufrK9a&&&&27&&&&&&&"),
DvmBoolean.valueOf(vm, false),
DvmInteger.valueOf(vm, 0),
new StringObject(vm, "mtop.alipictures.gravitywave.global.search.list"),
new StringObject(vm, "pageId=&pageName="),
null,
null,
null
)
);
logger.info("GetSearchSign -70102: " + ret.getValue().toString());
}
理论上,可以实现阿里系app的签名算法,实现脱离app获取阿里app的公开数据。