汽车之家apisign unidbg逆向

汽车之家apisign unidbg逆向

逆向

之前分析到了native函数的入口是sub_2D91C

image-20220109162920590

看看sub_2D8C0

image-20220109162941845

看看sub_2CC58

image-20220109163054159

由于if其他分支都是报Calc Md5 Failure,所以v13等于v22

image-20220109163317941

0x2CE56下断点。

emulator.attach().addBreakPoint(module.base + 0x2CE56);
image-20220109163422806

看看r6的数据

image-20220109163459846

因此s[11]等于0x40030019,所以函数的地址是0x30019,跳转过去看看

image-20220109163706823

hook验证一下

emulator.attach().addBreakPoint(module.base + 0x30019);
image-20220109170057686

blr在函数返回处下断点,C执行到函数返回处,看看原r1的数据

image-20220109165910021

说明确实是在这里生成的。

image-20220109165759023

接下来就是看看a1+48这个函数的输入,之前通过mr0可以看到a1+480x400a0ae1,所以函数地址0xa0ae1,跳过去看看

image-20220109170320953

发现不是函数,也没办法转成函数,点击CODE32alt+G,将值修改为1

image-20220110094315392
image-20220110094416810

选中按P修改为函数

image-20220110094501331
image-20220110094525126

看看sub_2EF30

image-20220110094735152

目测MD5,在sub_A0AE0下个断点看看

emulator.attach().addBreakPoint(module.base + 0xa0ae1);
image-20220109170531677

看看r0的数据

image-20220109170605047

cyberchef上试试MD5。

image-20220109170801913

和unidbg输出一样。更换输入后,发现前后的字符串不变,说明是固定的。

实现

import hashlib

_SALT = '@7U$aPOE@$'

def calc_sign(data):
    data = (_SALT + 'apisign' + data + _SALT)
    sign = hashlib.md5(data.encode()).hexdigest().upper()
    return sign

def test():
    data = '2|f17a9663_acd3_42e8_93ef_f93c5fdbcf50|autohomebrush|1641713028'
    sign = calc_sign(data)
    print(sign)
    assert sign == '1C4E5C182F7FFF5C350E1BB1B4C2B50C'

if __name__ == '__main__':
    test()

你可能感兴趣的:(汽车之家apisign unidbg逆向)