我发现用IDA破解TraceMe.exe比ODeasy多了。

打开IDA 后。直接搜索“序列号”。得到

双击跳转到反汇编窗体,按F5转换为类C++代码

signed int __stdcall DialogFunc(HWND hWnd, int a2, unsigned __int16 a3, int a4)

{

  signed int v5; // ebx@9

  int v6; // eax@11

  HWND v7; // eax@12

  HWND v8; // eax@12

  HWND v9; // eax@12

  HICON v10; // eax@20

  const CHAR String2[4]; // [sp+8h] [bp-F4h]@1

  int v12; // [sp+Ch] [bp-F0h]@1

  int v13; // [sp+10h] [bp-ECh]@1

  __int16 v14; // [sp+14h] [bp-E8h]@1

  char v15; // [sp+16h] [bp-E6h]@1

  char v16; // [sp+18h] [bp-E4h]@1

  __int16 v17; // [sp+2Ch] [bp-D0h]@1

  char v18; // [sp+2Eh] [bp-CEh]@1

  char v19; // [sp+30h] [bp-CCh]@1

  __int16 v20; // [sp+44h] [bp-B8h]@1

  char v21; // [sp+46h] [bp-B6h]@1

  CHAR String; // [sp+48h] [bp-B4h]@9

  const CHAR String1; // [sp+98h] [bp-64h]@9





  memcpy(&v16, "你输入字符要大于四个。", 0x14u);

  v17 = *(_WORD *)"!";

  v12 = dword_405054;

  v18 = aUFIKGb[22];

  v15 = byte_40505E;

  memcpy(&v19, "序列号错误。再来一次!", 0x14u);

  *(_DWORD *)String2 = dword_405050;

  v20 = *(_WORD *)"!";

  v14 = word_40505C;

  v13 = dword_405058;

  v21 = aAGmGb[22];

  if ( a2 == 16 )

  {

    DestroyWindow(hWnd);

    return 1;

  }

  if ( a2 == 272 )

  {

    v10 = LoadIconA(hInstance, (LPCSTR)0x70);

    SendMessageA(hWnd, 0x80u, 1u, (LPARAM)v10);

    SendDlgItemMessageA(hWnd, 110, 0xC5u, 0x50u, 0);

    return 1;

  }

  if ( a2 != 273 )

    return 0;

  if ( (signed int)a3 > 1013 )

  {

    if ( a3 == 1014 || a3 == 40002 )

      DialogBoxParamA(hInstance, (LPCSTR)0x67, hWnd, sub_401020, 0);

    return 0;

  }

  if ( a3 != 1013 )

  {

    if ( a3 == 2 || a3 == 1002 )

    {

      SendMessageA(hWnd, 0x10u, 0, 0);

      return 0;

    }

    return 0;

  }

  v5 = GetDlgItemTextA(hWnd, 110, &String, 81);//username

  GetDlgItemTextA(hWnd, 1000, (LPSTR)&String1, 101);//序列号

  if ( String && v5 >= 5 )//推断输入的username长度是不是大于5

  {

    LOBYTE(v6) = sub_401340(&String1, &String, v5);//此函数依据username生成序列号。并与输入的序列号进行比較

    if ( v6 )//v6==1,表示username和序列号匹配

    {

      lstrcpyA(::String1, String2);

      v7 = GetDlgItem(hWnd, 110);

      EnableWindow(v7, 0);

      v8 = GetDlgItem(hWnd, 1000);

      EnableWindow(v8, 0);

      v9 = GetDlgItem(hWnd, 1000);

    }

    else

    {

      lstrcpyA(::String1, &v19);

      v9 = GetDlgItem(hWnd, 1000);

    }

  }

  else

  {

    lstrcpyA(::String1, &v16);//username长度小于5。提示“你输入字符要大于四个”

    v9 = GetDlgItem(hWnd, 110);

  }

  SetFocus(v9);

  MessageBeep(0);

  DialogBoxParamA(hInstance, (LPCSTR)0x79, hWnd, sub_401060, 0);

  return 0;

}

bool __cdecl sub_401340(LPCSTR lpString1, LPSTR lpString2, signed int a3)

{

  signed int v3; // ecx@1

  int v4; // esi@1

  signed int i; // eax@1





  v3 = 3;

  v4 = 0;

  for ( i = 0; v3 < a3; ++i )

  {

    if ( i > 7 )

      i = 0;

    v4 += (unsigned __int8)byte_405030[i] * (unsigned __int8)lpString2[v3++];

  }

  wsprintfA(lpString2, "%ld", v4);

  return lstrcmpA(lpString1, lpString2) == 0;

}

byte_405030[]数组在.data区:

char byte_405030[8]={0x0C,0x0A,0x13,0x09,0x0C,0x0B,0x0A,0x08}

假如我输入username为:tanyo

v4=121*12+111*10=2562

输入usernametanyo,序列号2562进行验证:

使用IDA破解TraceMe.exe的更多相关文章

  1. 【逆向笔记】OD工具使用-逆向TraceMe.exe

    名词注释 System breakpoint:系统断点,OllyDbg用CreateProcessA加载DEBUG_ONLY_THIS_PROCESS参数执行,程序运行之后会触发一个INT13,在系统 ...

  2. Win7 64位使用IDA Pro 6.8调试64位exe程序

    有点小坑,记录备忘. 首先搞个IDA Pro6.8,写本文时能找到的最高版本,试了下果然比6.6强大许多,其实6.6也没怎么用过...... 32位版本有个Local Win32 debugger,但 ...

  3. 逆向破解学习二之<TraceMe>

    这次在破解TraceMe的时候,我有看过别人的视频.但是我并没有按照别人思路走,而是完全安全自己的思路试了一次.结果破解成功.新手学破解,如果有不对的地方,还请指出来. 004013A0 crackm ...

  4. 跨平台的神器RAD XE5 来啦!!!! XE5破解

    什么叫真正的跨平台,DELPHI经过这么长时间的洗礼,如今走上了夸平台的开发之路.希望RAD加油! 先去下一个XE5 再去下一个破解神器 一个破解BDS.exe的神器 开始吧.为了成功破解,请先将电脑 ...

  5. Quartus II 12.0 下载、安装和破解

    转载:http://www.cnblogs.com/imapla/archive/2012/09/10/2678814.html 20130417 Quartus II 12.0 不支持波形仿真,推荐 ...

  6. IAR Embedded Workbench for ARM 6.50.6 & 6.60.1 破解补丁

    IAR EWARM 6.50.6 & 6.60.1 破解 破解原理和方法见:http://blog.csdn.net/chivalrys/article/details/8564568 IAR ...

  7. 一些Wifi破解姿势

    wlan0:无线网卡设备 BSSID/AP's MAC:目标路由器的mac地址 Client's MAC:连接到此wifi客户端的mac地址 ESSID:这个无线的名字 大致思路: 获取bssid和e ...

  8. Android破解学习之路(十)—— 我们恋爱吧 三色绘恋 二次破解

    前言 好久没有写破解教程了(我不会告诉你我太懒了),找到一款恋爱游戏,像我这样的宅男只能玩玩恋爱游戏感觉一下恋爱的心动了.. 这款游戏免费试玩,但是后续章节得花6元钱购买,我怎么会有钱呢,而且身在吾爱 ...

  9. [20171214]hashcat破解oracle口令.txt

    [20171214]hashcat破解oracle口令.txt hashcat is the world's fastest and most advanced password recovery u ...

随机推荐

  1. Spring.Net学习笔记(二)-数据访问器

    Spring对ADO.NET也提供了支持,依赖与程序集Spring.Data.dll IDbProvider IDbProvider定义了数据访问提供器的基础,配置如下 <?xml versio ...

  2. C#随机取部分数据

    1.使用Random伪随机生成器 但是这样会由于转换为数组类型导致性能下降,千万要避免这种用法. 2.使用Take返回重头开始指定数量的连续元素 每次进来这个方法的时候,都使用Guid进行一次排序,然 ...

  3. 解决安装androidstudio无法查看源代码的问题

    如果androidstudio的sdk是自己导入的,则可能会有查看不了源代码的原因.原因是默认目录中没有这个api的源代码. 1.先在C:\Users\xxx\.AndroidStudio2.3\co ...

  4. mongo 3.4分片集群系列之八:分片管理

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  5. 关于Apache mod_rewrite的中文配置、使用和语法介绍(实现URL重写和防盗链功能)

    以数据库后台驱动的动态内容的网站,经常会遇到这些的问题: 当在浏览器的地址栏输入一个无效的参数时,会出现数据库的错误提示,这是一个安全的隐患 搜索引擎无法收录你的所有网页 网页的链接地址是一系列的参数 ...

  6. 00JAVA EE

    JAVA EE 三层架构 我们的开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器服务器.在JavaEE开发中,几乎全都是基于B/S架构的开发.那么 ...

  7. CodeFrist基础

    Code First(代码先行).它思想就是先定义模型中的类,再通过这些类生成数据库.这种开发模式适合于全新的项目,它使得我们可以以代码为核心进行设计而不是先构造数据库. EF中创建数据库的表必须要有 ...

  8. java jvm eclipse 性能调优

    低配配置 -Dfile.encoding=UTF-8-Xms960m-Xmx960m-Xmn384m-Xverify:none-Xss256k-XX:MaxTenuringThreshold=2-XX ...

  9. 【原】thinkphp修改Redis操作类,支持选择数据库功能及添加其他方法

    版本3.2.2(ThinkPHP\Library\Think\Cache\Driver\Redis.class.php), 一:官方默认不支持选择数据库功能及,现就可选择数据库功能进行说明. 1 co ...

  10. MySQL:INSERT ... UPDATE

    在 INSERT 语句末尾指定ON DUPLICATE KEY UPDATE时,如果插入的数据会导致表中的 UNIQUE 索引或 PRIMARY KEY 出现重复值,则会对导致重复的数据执行 UPDA ...