首页
社区
课程
招聘
[原创]kx3答案分析
2017-6-7 11:26 3500

[原创]kx3答案分析

2017-6-7 11:26
3500

[sub 004081F0]

检测输入合法性:[0,9] [a,f]

[004082F4] - 72a3d170

从该地址判断key长度为:16

[004083BE] - 72a3d170

该处判断key的前8位的校验和 大于 后8位校验和

[004085FC] - 72a3d170

该处判断。。。


a = 前8位的十六进制值

b = 后8位的十六进制值

c = 1711722997


v4 = c^2*2

v5 = a^2*v4

v6 = b^4+v5

v7 = c^4+v6

v8 = b^2*v4+v7

v9 = a^2*2*(b^2)+v8

v10 = a^4+v9

v11 = v10^0.5/2

v12 = v11/(c+a+b)

(a^4+a^2*2*(b^2)+b^2*c^2*2+c^4+b^4+a^2*c^2*2)^0.5/((c+a+b)*2) = 874402299.931726

(a^4+a^2*2*(b^2)+b^2*c^2*2+c^4+b^4+a^2*c^2*2)^0.5 = 874402299.931726*(c+a+b)*2

a^2+b^2+c^2 = 874402299.931726*(c+a+b)*2


v13 = c*a*b

v14 = (c+a+b)*(cb)*(ca)*(ac)

v15 = v13/(v14^0.5)

(c*a*b)/([(c+a+b)*(cb)*(ca)*(ac)]^0.5) == 373414231.362502

c*a*b == 373414231.362502 * ([(c+a+b)*(cb)*(ca)*(ac)]^0.5)


得到两公式。。。正在用穷举法跑结果,不确定公式是否正确

a,b,c是整数---右边结果也必须是整数

a^2+b^2+c^2 = 874402299.931726*(c+a+b)*2

左边正数---a+b+c是正数

c*a*b == 373414231.362502 * ([(c+a+b)*(cb)*(ca)*(ac)]^0.5)

右边有根号---连乘的结果必须是正数

a+b+c是正数---假设cb为正数,ca为负数,则ac为正数 X

假设ca为正数,cb为负数,则ac为正数 X

                 假设cb为正数,ca为正数,当a+b>c并且|a-b|<c时,ac为正数 √

假设a、b为一正一负,则a>b+c,与a<b+c矛盾 X

则a、b均为正数,a大于b,a+b>c并且a-b<c


#include "stdafx.h"

#include <math.h>

#include <Windows.h>


#define MAX_NUM 0x7FFFFFFF


int _tmain(int argc, _TCHAR* argv[])

{

    double  dTmp = 0.0;

    double  fc = 1711722997;

    double  fFun1c = 373414231.362502;

    double  fFun2c = 874402299.931726*2;

    double  dwFun1L = 0;

    double  dwFun1R = 0;

    double  dwFun2L = 0;

    double  dwFun2R = 0;

    DWORD   dwNum = 0;

    DWORD   dwTime = GetTickCount();

    // i == b

    for (DWORD i = 0; i < MAX_NUM; ++i)

    {

        // j == a

        for (DWORD j = (DWORD)fc-i; j < (DWORD)fc+i; ++j)

        {

            dwFun1L = fc*i*j;

            dTmp = (fc+i+j)*(fcj)*(fci)*(ifc);

            if (dTmp < 0)

                continue;

            dwFun1R = fFun1c*sqrt(dTmp);

            if (dwFun1L == dwFun1R)

            {

                printf("    fun1 i = %d j = %d", i, j);

            }

            else

                continue;

            

            dwFun2L = pow(fc, 2)+pow((double)i, 2)+pow((double)j, 2);

            dwFun2R = fFun2c*(fc+i+j);

            if (dwFun2L == dwFun2R)

            {

                printf("    fun2 i = %d j = %d", i, j);

                goto Exit0;

            }

        }

        if (dwNum++ == 0x4000)

        {

            printf("running i=%d", i);

            dwNum = 0;

        }

    }

Exit0:

    printf("use time %d", GetTickCount() - dwTime);

return 0;

}



[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回