逆向目标
目标:X道翻译
主页:aHR0cHM6Ly9mYW55aS55b3VkYW8uY29tLw==
接口:aHR0cHM6Ly9kaWN0LnlvdWRhby5jb20vd2VidHJhbnNsYXRl
逆向参数: Form Data中的sign值
逆向过程
抓包分析
首先,F12打开开发者工具看看我们在翻译的过程中都进行了那些请求,判断哪些请求是我们需要的。多次翻译测试发现每次翻译都会发送这三个请求,根据请求内容可以判断出弟二次请求是我们需要的翻译接口。
请求参数分析
图片中没有说明的都是多次请求之后发现是固定值
逆向分析
根据上述分析可以明确我们需要逆向的内容是sign值
- 接下来我们对目标接口的请求的调用堆栈进行断点,进入堆栈后对应的行打上断点。
2. 打完断点后重新输入需要翻译的内容会断在刚刚打上的断点处
3. 此时我们需要分析堆栈信息向上(代码调用顺序从下往上,我们需要从上往下查看)进行寻找,根据分析我们能定位到sign值生成的地方,我们需要继续在此打下断点进行调试。
4. 重新打算断点先放行所有断点,等页面渲染完成后,重新输入翻译内荣,发现确实能够在此断住,那就说明这里是生成sign的地方。这里我们需要按F8对断点放行一次,原因需要自己向上跟一次堆栈可以发现第一次生成的sign不是给我们需要的接口生成的,只有第二次生成的才是,并且加密函数S中的参数值俩次都不一样但是每次都是固定的(稍微跟一下堆栈就可以发现),下面图一是第一次生成,我们选择放行,直到图二。
5. 根据图二中的内容可以分析得出函数S是生成sign的函数,并且参数e是固定值,参数o是时间戳。
6. 接下来我们把sign生成逻辑扣下来到本地并运行
7. 上述代码运行后发现函数S未定义,我们需要找到该函数,找到后将代码扣下来后继续运行,发现缺少变量d和u,这时我们需要向上查看代码,在函数S的作用域内查找可以发现来个变量是定值。
8. 根据上面步骤重复操作直到出现对象i未定义, 这时我们找到定义对象i的位置发现对象i是由o(91565) 生成。
9. 这时我们发现有很多由函数o调用生成的对象,并且我们把鼠标放上去发现他是一个定值,这显然不是这个函数o,这时当前作用域内是我们刚刚断点的位置不是函数o执行的作用域内,所以我们需要找函数o是哪个,这里我们需要在这打上断点并且刷新页面。
10. 刷新后会定位在下图所示处,跟进函数o,分析代码结构可以发现这是一个webpack格式,并且函数o是启动函数。
11. 接下来我们需要开始扣代码,首先我们扣下生成sign值的函数。
12. 接下来改造webpack,并且出去启动函数,这边导出启动函数赋值为o1,并且在启动函数插个桩,这个主要是用来查看他调用了哪些函数,删除了对象e的内容,这里面存放调用的函数。
13. 放入ide运行,记得修改函数o为o1,运行后报错且刚刚插桩位置输出调用的函数。
14. 再回到开发者工具在这俩个文件夹搜索这个函数并补到对象e中。然后继续运行。
15. 循环步骤14直到出值,这里需要有耐心,新版是真的多补了半个多小时,纯苦力活。