近期在对某手机app作安全测试,很好奇我每次如果不保存密码,登录它都要验证短信码,这跟微信的那种验证完全不一样啊,直觉告诉我这里面有问题,随即开始分析。
找到com/xxx/mobile/xxxx/ui/view/CheckedMsgActivity.java对应的smail代码:
method publiconKeyDown(ILandroid/view/KeyEvent;)Z
.locals 1
const/4 v0, 0x4
if-eq p1, v0, :cond_0 #此处将if-ne修改为if-eq
const/4 v0, 0x0
:goto_0
return v0
:cond_0
invoke-super {p0, p1, p2},Lcom/xxx/mobile/xxx/ui/view/SuperActivity;->onKeyDown(ILandroid/view/KeyEvent;)Z
move-result v0
goto :goto_0
.end method
机理分析:
if(p1 == 4)
return v0;
else
invoke-super(SuperActivity)
所以修改判定条件,不论短信输入正确与否,都跳转到SuperActivity。
1、若账号初次使用app,服务端记录此用户使用手机的IMEI
2、用户每次登录时,在服务端匹配IMEI和账号
3、若二者不匹配,认为用户换了手机在登录,则要求短信验证,验证通过后将新的IMEI号作为用户的匹配号。
4、重复以上步骤