• 160CrackMe~002


    test:将两个操作数进行按位AND,设结果是TEMP,若TEMP为0则ZF为1,否则,ZF为0

    cmp oprd1,oprd2:将第一个操作数减去第二个操作数

    PS:

    在函数内部呢,一般[ebp+8]是第一个参数,[ebp+C]是第二个参数,每次多加4依此类推。而函数内部的局部变量常用[ebp-4][ebp-8]...等等。(原因讲起来有点复杂,先记住就行了)函数的返回值在EAX里。

    一  

      首先在OD中利用中文搜索找到报错字符串,在整个函数的入口处F2下断点(push ebp),之后按F9运行,键入

    点击ok,OD停在了入口处,按F8进行单步调试,发现密钥产生代码

     1 0040240F   .  8B45 E4       mov eax,dword ptr ss:[ebp-0x1C]          ;  eax='vincebye'
     2 00402412   .  50            push eax                                 ; /String = NULL
     3 00402413   .  8B1A          mov ebx,dword ptr ds:[edx]               ; |
     4 00402415   .  FF15 E4404000 call dword ptr ds:[<&MSVBVM50.__vbaLenBs>; \__vbaLenBstr
     5 0040241B   .  8BF8          mov edi,eax
     6 0040241D   .  8B4D E8       mov ecx,dword ptr ss:[ebp-0x18]
     7 00402420   .  69FF FB7C0100 imul edi,edi,0x17CFB                     ;  edi=edi*0x17CFB
     8 00402426   .  51            push ecx                                 ; /String = 37C6F27C ???
     9 00402427   .  0F80 91020000 jo Afkayas_.004026BE                     ; |
    10 0040242D   .  FF15 F8404000 call dword ptr ds:[<&MSVBVM50.#rtcAnsiVa>; 
    tcAnsiValueBstr
    11 00402433   .  0FBFD0        movsx edx,ax
    12 00402436   .  03FA          add edi,edx                              ;  edi=edi+edx
    13 00402438   .  0F80 80020000 jo Afkayas_.004026BE
    14 0040243E   .  57            push edi
    15 0040243F   .  FF15 E0404000 call dword ptr ds:[<&MSVBVM50.__vbaStrI4>;  MSVBVM50.__vbaStrI4
    16 00402445   .  8BD0          mov edx,eax                              ;  可能为密钥?

    PS:

    _vbaLenBs:计算字符串长度

    rtcAnsiValueBstr:计算字符串ASCII值

    _vbaStrI4:转化为长整型数值

    算法:计算name的长度*0x17CFB+name第一个字符串的ASCII值,再转化为10进制数值,再最后在数值前面加上AKA-

     注册机:

      

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<iostream>
     4 using namespace std;
     5 int main()
     6 {
     7     printf("name:");
     8     char name[100];
     9     scanf("%s", name);
    10     int first_value;
    11     int length;
    12     int  value;
    13     length = strlen(name);
    14     first_value = name[0];
    15     value = length * 0x17CFB + first_value;
    16     cout << "Code:"<<"AKA-"<<value << endl;
    17     system("pause");
    18 }
  • 相关阅读:
    【.Net】鼠标点击控制鼠标活动范围 ClipCursor
    【设计模式】工厂模式 Factory Pattern
    sublime text3 关闭更新提醒
    Mac下Sublime Text3激活码
    测试开发(1) -- 整数反转
    测试开发工程师面试资料(未完)
    Mojave使用pyenv安装python-zlib错误
    清理 Xcode 10
    mitmproxy
    卸载CocoaPods
  • 原文地址:https://www.cnblogs.com/vincebye/p/6854272.html
Copyright © 2020-2023  润新知