吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 3610|回复: 17

[KeyGenMe] 【已解出】新手自制低难度 KeygenMe,24小时内第1个完成者奖50元人民币

  [复制链接]
t00t00 发表于 2020-9-14 20:07
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

本帖最后由 t00t00 于 2020-9-15 11:16 编辑

新手自制低难度 KeygenMe,24 小时内第 1 个完成者奖 50 元人民币

信息

支持平台:Linux、MAC、Win32、Win64
加壳信息:UPX 压缩壳,直接可以脱,单纯压缩用。
类型:用户名 + 注册码

02.png

01.png

提供两组用户名和注册码

用户名1:username
注册码1:961588245s8d6

用户名2:test
注册码2:99ssd20

声明:

  1. 干净环境中,10秒内出提示且不能虚假提示;
  2. KeyGen算法不能基于“未在CrackMe中公开的秘密信息”。如果需要穷举,则穷举时间必须小于5分钟;
  3. 不能依赖网络、不能依赖硬件;
  4. 不使用第三方保护工具、禁止恶意破坏机器;
  5. 不超过10M;
  6. 同一用户名不应有多个序列号;
  7. 注册码字符集限定为['0','9'],['a','z'],['A','Z'];
  8. 绿色安全,不含木马或 rootkit,没有任何危险或恶意程序,不能对系统进行破坏,可以正常结束,结束后不会给系统留下垃圾(比如临时文件或驱动),不会使系统重启。
  9. 除 UPX 外,没有使用额外的软件加花/加壳/混淆。编译参数会与原代码一起公布。
  10. 无反反编译技术,纯算法。
  11. 因为忘记改静态优化范围,所以很快就可以解。。。

奖励

24 小时内第一个写出 KeyGen 第一个获得用户名“wuaipojie”的注册码奖励 50 元。本项目 24 小时后开源。(截至 2020 年 9 月 16 日 00:00:00)
注:50 元并不代表难度大,就是想看看大佬破解的过程。

下载链接:

文叔叔(2天有效)
蓝奏云(永久有效)

免费评分

参与人数 2吾爱币 +7 热心值 +2 收起 理由
CrazyNut + 6 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
nut1999 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

灰灰。 发表于 2020-9-15 00:05
请输入用户名:
wuaipojie
请输入注册码:
02910966929d68s
成功注册!你太牛逼了!
在 2020 年 9 月 16 日 00:00 前,私发支付宝号 + 本次注册码获取红包

算法就不逆了,也是时间问题~
QQ截图20200915000521.png

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
CrazyNut + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

solly 发表于 2020-9-15 11:03
t00t00 发表于 2020-9-15 08:39
大佬完整写一次教程吧,另送200CB,CTF有用到,但是没头绪,就来吾爱破解找师傅了。听说要 ...

符号还原没弄过,我都是直接上 OD。

逆向的大概过程如下:
1、先查看文件信息,upx 压缩。先去壳: upx -d win32.exe 就可以了。
2、用IDA打开,看导入表,没有看到控制台输入相关API函数,但有一个输出相关API,WriteConsoleW() ,直接下断 bp WriteConsoleW。
3、F9 运行程序,程序会中断在  WriteConsoleW 中,F2取消中断,按 Ctrl+F9,再 F8 返回,再  Ctrl+F9,F8,这样循环按,一直到 Ctrl+F9不再定位到 ret 指令,这时就是定位到了算法代码位置了,这个时候会要输入用户名才可继续了。
4、从刚才F8返回的位置往下看的第1个call就是输入用户名调用,在这个call的后面下F2断点,再去输入用户就可以继续断下来,一路F8,后面再输入序列号就是跟踪算法了。
相关代码如下:
[Asm] 纯文本查看 复制代码
0049A470   > \8D05 C0C74A00         lea eax,dword ptr ds:[0x4AC7C0]
0049A476   .  890424                mov dword ptr ss:[esp],eax
0049A479   .  E8 F2FFF6FF           call win32.0040A470
0049A47E   .  8B4424 04             mov eax,dword ptr ss:[esp+0x4]
0049A482   .  898424 98000000       mov dword ptr ss:[esp+0x98],eax
0049A489   .  C78424 B4000000 00000>mov dword ptr ss:[esp+0xB4],0x0
0049A494   .  C78424 B8000000 00000>mov dword ptr ss:[esp+0xB8],0x0
0049A49F   .  8D0D C0C74A00         lea ecx,dword ptr ds:[0x4AC7C0]
0049A4A5   .  898C24 B4000000       mov dword ptr ss:[esp+0xB4],ecx
0049A4AC   .  8D15 A0D04D00         lea edx,dword ptr ds:[0x4DD0A0]
0049A4B2   .  899424 B8000000       mov dword ptr ss:[esp+0xB8],edx
0049A4B9   .  8B15 B8625600         mov edx,dword ptr ds:[0x5662B8]
0049A4BF   .  8D1D 50E04D00         lea ebx,dword ptr ds:[0x4DE050]
0049A4C5   .  891C24                mov dword ptr ss:[esp],ebx
0049A4C8   .  895424 04             mov dword ptr ss:[esp+0x4],edx
0049A4CC   .  8D9424 B4000000       lea edx,dword ptr ss:[esp+0xB4]
0049A4D3   .  895424 08             mov dword ptr ss:[esp+0x8],edx
0049A4D7   .  C74424 0C 01000000    mov dword ptr ss:[esp+0xC],0x1
0049A4DF   .  C74424 10 01000000    mov dword ptr ss:[esp+0x10],0x1
0049A4E7   .  E8 B44BFFFF           call win32.0048F0A0                      ;  print("请输入用户名:")
0049A4EC   .  C78424 AC000000 00000>mov dword ptr ss:[esp+0xAC],0x0
0049A4F7   .  C78424 B0000000 00000>mov dword ptr ss:[esp+0xB0],0x0
0049A502   .  8D05 A0564A00         lea eax,dword ptr ds:[0x4A56A0]
0049A508   .  898424 AC000000       mov dword ptr ss:[esp+0xAC],eax
0049A50F   .  8B8424 98000000       mov eax,dword ptr ss:[esp+0x98]
0049A516   .  898424 B0000000       mov dword ptr ss:[esp+0xB0],eax
0049A51D   .  8B0D B4625600         mov ecx,dword ptr ds:[0x5662B4]
0049A523   .  8D15 30E04D00         lea edx,dword ptr ds:[0x4DE030]
0049A529   .  891424                mov dword ptr ss:[esp],edx
0049A52C   .  894C24 04             mov dword ptr ss:[esp+0x4],ecx
0049A530   .  8D8C24 AC000000       lea ecx,dword ptr ss:[esp+0xAC]
0049A537   .  894C24 08             mov dword ptr ss:[esp+0x8],ecx
0049A53B   .  C74424 0C 01000000    mov dword ptr ss:[esp+0xC],0x1
0049A543   .  C74424 10 01000000    mov dword ptr ss:[esp+0x10],0x1
0049A54B   .  E8 009FFFFF           call win32.00494450                      ;  input_name
0049A550   .  8D05 40724A00         lea eax,dword ptr ds:[0x4A7240]
0049A556   .  890424                mov dword ptr ss:[esp],eax
0049A559   .  E8 12FFF6FF           call win32.0040A470
0049A55E   .  8B4424 04             mov eax,dword ptr ss:[esp+0x4]
0049A562   .  898424 94000000       mov dword ptr ss:[esp+0x94],eax
0049A569   .  C78424 A4000000 00000>mov dword ptr ss:[esp+0xA4],0x0
0049A574   .  C78424 A8000000 00000>mov dword ptr ss:[esp+0xA8],0x0
0049A57F   .  8D0D C0C74A00         lea ecx,dword ptr ds:[0x4AC7C0]
0049A585   .  898C24 A4000000       mov dword ptr ss:[esp+0xA4],ecx
0049A58C   .  8D15 A8D04D00         lea edx,dword ptr ds:[0x4DD0A8]
0049A592   .  899424 A8000000       mov dword ptr ss:[esp+0xA8],edx
0049A599   .  8B15 B8625600         mov edx,dword ptr ds:[0x5662B8]
0049A59F   .  8D1D 50E04D00         lea ebx,dword ptr ds:[0x4DE050]
0049A5A5   .  891C24                mov dword ptr ss:[esp],ebx
0049A5A8   .  895424 04             mov dword ptr ss:[esp+0x4],edx
0049A5AC   .  8D9424 A4000000       lea edx,dword ptr ss:[esp+0xA4]
0049A5B3   .  895424 08             mov dword ptr ss:[esp+0x8],edx
0049A5B7   .  C74424 0C 01000000    mov dword ptr ss:[esp+0xC],0x1
0049A5BF   .  C74424 10 01000000    mov dword ptr ss:[esp+0x10],0x1
0049A5C7   .  E8 D44AFFFF           call win32.0048F0A0                      ;  print("请输入注册码:")
0049A5CC   .  C78424 9C000000 00000>mov dword ptr ss:[esp+0x9C],0x0
0049A5D7   .  C78424 A0000000 00000>mov dword ptr ss:[esp+0xA0],0x0
0049A5E2   .  8D05 202E4A00         lea eax,dword ptr ds:[0x4A2E20]
0049A5E8   .  898424 9C000000       mov dword ptr ss:[esp+0x9C],eax
0049A5EF   .  8B8424 94000000       mov eax,dword ptr ss:[esp+0x94]
0049A5F6   .  898424 A0000000       mov dword ptr ss:[esp+0xA0],eax
0049A5FD   .  8B0D B4625600         mov ecx,dword ptr ds:[0x5662B4]
0049A603   .  8D15 30E04D00         lea edx,dword ptr ds:[0x4DE030]
0049A609   .  891424                mov dword ptr ss:[esp],edx
0049A60C   .  894C24 04             mov dword ptr ss:[esp+0x4],ecx
0049A610   .  8D8C24 9C000000       lea ecx,dword ptr ss:[esp+0x9C]
0049A617   .  894C24 08             mov dword ptr ss:[esp+0x8],ecx
0049A61B   .  C74424 0C 01000000    mov dword ptr ss:[esp+0xC],0x1
0049A623   .  C74424 10 01000000    mov dword ptr ss:[esp+0x10],0x1
0049A62B   .  E8 209EFFFF           call win32.00494450                      ;  input(sn)
0049A630   .  8B8424 98000000       mov eax,dword ptr ss:[esp+0x98]
0049A637   .  8B08                  mov ecx,dword ptr ds:[eax]               ;  ecx ==> name
0049A639   .  898C24 90000000       mov dword ptr ss:[esp+0x90],ecx
0049A640   .  8B50 04               mov edx,dword ptr ds:[eax+0x4]           ;  edx = len(name)
0049A643   .  895424 44             mov dword ptr ss:[esp+0x44],edx
0049A647   .  31DB                  xor ebx,ebx
0049A649   .  31ED                  xor ebp,ebp
0049A64B   .  31F6                  xor esi,esi
0049A64D   .  E9 89000000           jmp win32.0049A6DB
0049A652   >  895C24 30             mov dword ptr ss:[esp+0x30],ebx          ;  i, ebx
0049A656   .  0FB6040B              movzx eax,byte ptr ds:[ebx+ecx]          ;  name[i]
0049A65A   .  8D5424 52             lea edx,dword ptr ss:[esp+0x52]
0049A65E   .  891424                mov dword ptr ss:[esp],edx               ;  edx ==> "12s45d6890ABCbER3HTJKLMNOPQFSmUyWaYZXDc7efghijklInopqrGtuvwxVz"
0049A661   .  C74424 04 3E000000    mov dword ptr ss:[esp+0x4],0x3E          ;  62
0049A669   .  C74424 08 3E000000    mov dword ptr ss:[esp+0x8],0x3E          ;  62
0049A671   .  884424 0C             mov byte ptr ss:[esp+0xC],al             ;  name[i]
0049A675   .  E8 C67DF6FF           call win32.00402440                      ;  int idx = edx->indexOf(name[i])
0049A67A   .  8B4424 10             mov eax,dword ptr ss:[esp+0x10]
0049A67E   .  f20f2ac0              cvtsi2sd xmm0,eax
0049A682   .  f20f110424            movsd qword ptr ss:[esp],xmm0
0049A687   .  8B4424 30             mov eax,dword ptr ss:[esp+0x30]
0049A68B   .  40                    inc eax                                  ;  i+1
0049A68C   .  894424 40             mov dword ptr ss:[esp+0x40],eax
0049A690   .  f20f2ac0              cvtsi2sd xmm0,eax
0049A694   .  f20f114424 08         movsd qword ptr ss:[esp+0x8],xmm0
0049A69A   .  E8 718BFCFF           call win32.00463210                      ;  pow(idx, i+1)
0049A69F   .  f20f104424 10         movsd xmm0,qword ptr ss:[esp+0x10]
0049A6A5   .  f20f110424            movsd qword ptr ss:[esp],xmm0
0049A6AA   .  E8 913DFBFF           call win32.0044E440                      ;  Double2Int64
0049A6AF   .  8B4424 08             mov eax,dword ptr ss:[esp+0x8]
0049A6B3   .  8B4C24 24             mov ecx,dword ptr ss:[esp+0x24]
0049A6B7   .  01C1                  add ecx,eax                              ;  chk_sum_lo
0049A6B9   .  8B6C24 0C             mov ebp,dword ptr ss:[esp+0xC]
0049A6BD   .  8B4424 28             mov eax,dword ptr ss:[esp+0x28]
0049A6C1   .  11C5                  adc ebp,eax                              ;  chk_sum_hi
0049A6C3   .  8B8424 98000000       mov eax,dword ptr ss:[esp+0x98]
0049A6CA   .  8B5424 44             mov edx,dword ptr ss:[esp+0x44]
0049A6CE   .  8B5C24 40             mov ebx,dword ptr ss:[esp+0x40]
0049A6D2   .  89CE                  mov esi,ecx
0049A6D4   .  8B8C24 90000000       mov ecx,dword ptr ss:[esp+0x90]
0049A6DB   >  896C24 28             mov dword ptr ss:[esp+0x28],ebp
0049A6DF   .  897424 24             mov dword ptr ss:[esp+0x24],esi
0049A6E3   .  39D3                  cmp ebx,edx
0049A6E5   .^ 0F8C 67FFFFFF         jl win32.0049A652                        ;  loop
0049A6EB   .  8B8424 94000000       mov eax,dword ptr ss:[esp+0x94]          ;  [eax] ===> sn
0049A6F2   .  8B48 04               mov ecx,dword ptr ds:[eax+0x4]           ;  len_sn
0049A6F5   .  894C24 44             mov dword ptr ss:[esp+0x44],ecx
0049A6F9   .  893424                mov dword ptr ss:[esp],esi
0049A6FC   .  896C24 04             mov dword ptr ss:[esp+0x4],ebp
0049A700   .  C74424 08 0A000000    mov dword ptr ss:[esp+0x8],0xA
0049A708   .  E8 8325FDFF           call win32.0046CC90                      ;  int64toStr(chk_sum)
0049A70D   .  8B4424 44             mov eax,dword ptr ss:[esp+0x44]
0049A711   .  394424 10             cmp dword ptr ss:[esp+0x10],eax          ;  len_check_sn_str == 8
0049A715   .  0F85 76020000         jnz win32.0049A991                       ;  goto 显示长度错误
0049A71B   >  8B4424 24             mov eax,dword ptr ss:[esp+0x24]
0049A71F   .  8B4C24 28             mov ecx,dword ptr ss:[esp+0x28]
0049A723   .  31D2                  xor edx,edx
0049A725   .  EB 09                 jmp short win32.0049A730
0049A727   >  8D58 01               lea ebx,dword ptr ds:[eax+0x1]
0049A72A   .  89C8                  mov eax,ecx
0049A72C   .  89D1                  mov ecx,edx
0049A72E   .  89DA                  mov edx,ebx
0049A730   >  85C9                  test ecx,ecx
0049A732   .  0F94C3                sete bl
0049A735   .  87DD                  xchg ebp,ebx
0049A737   .  0F97C3                seta bl
0049A73A   .  87DD                  xchg ebp,ebx
0049A73C   .  85C0                  test eax,eax
0049A73E   .  87DE                  xchg esi,ebx
0049A740   .  0F97C3                seta bl
0049A743   .  87DE                  xchg esi,ebx
0049A745   .  21F3                  and ebx,esi
0049A747   .  09DD                  or ebp,ebx
0049A749   .  95                    xchg eax,ebp
0049A74A   .  84C0                  test al,al
0049A74C   .  95                    xchg eax,ebp
0049A74D   .  0F84 3C010000         je win32.0049A88F                        ;  全部正确则跳转
0049A753   .  894424 24             mov dword ptr ss:[esp+0x24],eax
0049A757   .  894C24 28             mov dword ptr ss:[esp+0x28],ecx
0049A75B   .  895424 2C             mov dword ptr ss:[esp+0x2C],edx
0049A75F   .  890424                mov dword ptr ss:[esp],eax
0049A762   .  894C24 04             mov dword ptr ss:[esp+0x4],ecx
0049A766   .  E8 153EFBFF           call win32.0044E580                      ;  int64toDouble(check_sum)
0049A76B   .  f20f104424 08         movsd xmm0,qword ptr ss:[esp+0x8]
0049A771   .  f20f110424            movsd qword ptr ss:[esp],xmm0
0049A776   .  f20f1005 40cf4d00     movsd xmm0,qword ptr ds:[0x4dcf40]       ;  常量Double: 10
0049A77E   .  f20f114424 08         movsd qword ptr ss:[esp+0x8],xmm0
0049A784   .  E8 F789FCFF           call win32.00463180                      ;  mod(check_sum, 10)
0049A789   .  f20f104424 10         movsd xmm0,qword ptr ss:[esp+0x10]
0049A78F   .  f20f114424 48         movsd qword ptr ss:[esp+0x48],xmm0
0049A795   .  8B4424 24             mov eax,dword ptr ss:[esp+0x24]
0049A799   .  890424                mov dword ptr ss:[esp],eax
0049A79C   .  8B4424 28             mov eax,dword ptr ss:[esp+0x28]
0049A7A0   .  894424 04             mov dword ptr ss:[esp+0x4],eax
0049A7A4   .  C74424 08 0A000000    mov dword ptr ss:[esp+0x8],0xA           ;  10
0049A7AC   .  C74424 0C 00000000    mov dword ptr ss:[esp+0xC],0x0
0049A7B4   .  E8 573FFBFF           call win32.0044E710                      ;  check_sum = (int)div(check_sum, 10)
0049A7B9   .  f20f104424 48         movsd xmm0,qword ptr ss:[esp+0x48]
0049A7BF   .  f20f2cc0              cvttsd2si eax,xmm0
0049A7C3   .  8B4C24 10             mov ecx,dword ptr ss:[esp+0x10]
0049A7C7   .  8B5424 14             mov edx,dword ptr ss:[esp+0x14]
0049A7CB   .  83F8 3E               cmp eax,0x3E                             ;  eax是mod()的结果。
0049A7CE   .  0F83 38020000         jnb win32.0049AA0C
0049A7D4   .  0FB65C04 52           movzx ebx,byte ptr ss:[esp+eax+0x52]     ;  查表
0049A7D9   .  8BAC24 94000000       mov ebp,dword ptr ss:[esp+0x94]
0049A7E0   .  8B75 04               mov esi,dword ptr ss:[ebp+0x4]
0049A7E3   .  8B7D 00               mov edi,dword ptr ss:[ebp]               ;  edi ==> input_sn
0049A7E6   .  8B4424 2C             mov eax,dword ptr ss:[esp+0x2C]
0049A7EA   .  39F0                  cmp eax,esi
0049A7EC   .  0F83 13020000         jnb win32.0049AA05
0049A7F2   .  0FB63438              movzx esi,byte ptr ds:[eax+edi]          ;  取输入的sn
0049A7F6   .  96                    xchg eax,esi
0049A7F7   .  38C3                  cmp bl,al                                ;  字符比较,这里可得到正确的明文字符序列号
0049A7F9   .  96                    xchg eax,esi
0049A7FA   .^ 0F84 27FFFFFF         je win32.0049A727
0049A800   .  894C24 3C             mov dword ptr ss:[esp+0x3C],ecx
0049A804   .  895424 38             mov dword ptr ss:[esp+0x38],edx
0049A808   .  C78424 CC000000 00000>mov dword ptr ss:[esp+0xCC],0x0
0049A813   .  C78424 D0000000 00000>mov dword ptr ss:[esp+0xD0],0x0
0049A81E   .  8D05 C0C74A00         lea eax,dword ptr ds:[0x4AC7C0]
0049A824   .  898424 CC000000       mov dword ptr ss:[esp+0xCC],eax
0049A82B   .  8D0D B8D04D00         lea ecx,dword ptr ds:[0x4DD0B8]
0049A831   .  898C24 D0000000       mov dword ptr ss:[esp+0xD0],ecx
0049A838   .  8B15 B8625600         mov edx,dword ptr ds:[0x5662B8]
0049A83E   .  8D1D 50E04D00         lea ebx,dword ptr ds:[0x4DE050]
0049A844   .  891C24                mov dword ptr ss:[esp],ebx
0049A847   .  895424 04             mov dword ptr ss:[esp+0x4],edx
0049A84B   .  8D9424 CC000000       lea edx,dword ptr ss:[esp+0xCC]
0049A852   .  895424 08             mov dword ptr ss:[esp+0x8],edx
0049A856   .  C74424 0C 01000000    mov dword ptr ss:[esp+0xC],0x1
0049A85E   .  C74424 10 01000000    mov dword ptr ss:[esp+0x10],0x1
0049A866   .  E8 3548FFFF           call win32.0048F0A0                      ;  print("认证失败!")
0049A86B   .  C70424 01000000       mov dword ptr ss:[esp],0x1
0049A872   .  E8 491BFFFF           call win32.0048C3C0
0049A877   .  8B4424 2C             mov eax,dword ptr ss:[esp+0x2C]
0049A87B   .  8B4C24 3C             mov ecx,dword ptr ss:[esp+0x3C]
0049A87F   .  8B5424 38             mov edx,dword ptr ss:[esp+0x38]
0049A883   .  8BAC24 94000000       mov ebp,dword ptr ss:[esp+0x94]
0049A88A   .^ E9 98FEFFFF           jmp win32.0049A727
0049A88F   >  C78424 C4000000 00000>mov dword ptr ss:[esp+0xC4],0x0
0049A89A   .  C78424 C8000000 00000>mov dword ptr ss:[esp+0xC8],0x0
0049A8A5   .  8D05 C0C74A00         lea eax,dword ptr ds:[0x4AC7C0]
0049A8AB   .  898424 C4000000       mov dword ptr ss:[esp+0xC4],eax
0049A8B2   .  8D0D C0D04D00         lea ecx,dword ptr ds:[0x4DD0C0]
0049A8B8   .  898C24 C8000000       mov dword ptr ss:[esp+0xC8],ecx
0049A8BF   .  8B0D B8625600         mov ecx,dword ptr ds:[0x5662B8]
0049A8C5   .  8D15 50E04D00         lea edx,dword ptr ds:[0x4DE050]
0049A8CB   .  891424                mov dword ptr ss:[esp],edx
0049A8CE   .  894C24 04             mov dword ptr ss:[esp+0x4],ecx
0049A8D2   .  8D8C24 C4000000       lea ecx,dword ptr ss:[esp+0xC4]
0049A8D9   .  894C24 08             mov dword ptr ss:[esp+0x8],ecx
0049A8DD   .  C74424 0C 01000000    mov dword ptr ss:[esp+0xC],0x1
0049A8E5   .  C74424 10 01000000    mov dword ptr ss:[esp+0x10],0x1
0049A8ED   .  E8 AE47FFFF           call win32.0048F0A0
0049A8F2   .  8B8424 98000000       mov eax,dword ptr ss:[esp+0x98]
0049A8F9   .  8B48 04               mov ecx,dword ptr ds:[eax+0x4]
0049A8FC   .  8B00                  mov eax,dword ptr ds:[eax]
0049A8FE   .  83F9 09               cmp ecx,0x9
0049A901   .  74 07                 je short win32.0049A90A
0049A903   >  81C4 DC000000         add esp,0xDC
0049A909   .  C3                    retn


solly 发表于 2020-9-15 01:43
本帖最后由 solly 于 2020-9-15 01:48 编辑

[C++] 纯文本查看 复制代码
#include <iostream>
#include <string.h>
#include <math.h>

const char base[] = "12s45d6890ABCbER3HTJKLMNOPQFSmUyWaYZXDc7efghijklInopqrGtuvwxVz";
const long count = 62;

int main(int argc, char** argv) {
	
	//char name[] = "solly";
	char name[] = "wuaipojie";
	char pwd[20];
	
	int n = strlen(name);
	
	unsigned long long sum = 0;
	for(int i=0; i<n; i++) {
		int idx = -1;
		for(int j=0; j<count; j++) {
			if(name[i] == base[j]) {
				idx = j;
				break;
			}
		}
		printf("idx: %d\n", idx);
		sum += pow(idx, i+1);
	}
	
	printf("check sum: %llu\n", sum);
	
	int i = 0;
	while(sum>0) {
		int idx = sum % 10;
		sum = sum / 10;
		pwd[i++] = base[idx]; 
	}
	pwd[i] = '\0';
	
	printf("password: %s\n", pwd);
	
	return 0;
}


1023.png

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
CrazyNut + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

灰灰。 发表于 2020-9-15 10:23
本帖最后由 灰灰。 于 2020-9-15 10:30 编辑
t00t00 发表于 2020-9-15 08:20
感谢感谢,希望能够完整讲讲这个破解过程。因为 @灰灰。  第一个解出,所以就

符号还原使用IDAGolangHelper,main函数就是符号还原后名为main_main的函数,剩下的就是看main函数里的内容了,基本都很清晰
shaunkelly 发表于 2020-9-14 20:15
50元美刀,这个是可以有的哦
 楼主| t00t00 发表于 2020-9-14 20:16
shaunkelly 发表于 2020-9-14 20:15
50元美刀,这个是可以有的哦

难度不够大,如果加了反反编译,我会提高到50美元的
 楼主| t00t00 发表于 2020-9-15 08:20
solly 发表于 2020-9-15 01:43
[mw_shl_code=cpp,true]#include
#include
#include

感谢感谢,希望能够完整讲讲这个破解过程。因为 @灰灰。  第一个解出,所以就
 楼主| t00t00 发表于 2020-9-15 08:24
相关代码已开源,https://github.com/t00t00-crypto/crackme1

希望各位大佬能够完整讲讲符号信息还原的方式和找到main函数的方式。
solly 发表于 2020-9-15 08:38
t00t00 发表于 2020-9-15 08:20
感谢感谢,希望能够完整讲讲这个破解过程。因为 @灰灰。  第一个解出,所以就

这个是go语言编译的多线程程序,从start()入手不行,以前没弄过go语言的,先了解了一下go。
突破点从控制台输入输出API入手,就可以定位到算法代码。不逆算法很快可以定位字符比较位置,明文比较的,因此只要把输入API断下,输入完序列号,在序列号下内存硬中断,可以瞬间定位字符比较位置,其它什么都不用看了。
 楼主| t00t00 发表于 2020-9-15 08:39
本帖最后由 t00t00 于 2020-9-15 08:42 编辑
solly 发表于 2020-9-15 08:38
这个是go语言编译的多线程程序,从start()入手不行,以前没弄过go语言的,先了解了一下go。
突破点从控 ...

大佬完整写一次教程吧,另送200CB,CTF有用到,但是没头绪,就来吾爱破解找师傅了。听说要符号信息还原,不知道怎么操作
居客 发表于 2020-9-15 09:28
t00t00 发表于 2020-9-15 08:24
相关代码已开源,https://github.com/t00t00-crypto/crackme1

希望各位大佬能够完整讲讲符号信息还原的 ...

楼主404了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2020-9-24 22:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表