keyFile 巩固练习

系统 : Windows xp

程序 : noodles-crackme2

程序下载地址 :http://pan.baidu.com/s/1mhJ4Ems

要求 : 编写KeyFile

使用工具 : OD

可在看雪论坛中查找关于此程序的破文:传送门

废话不多说,直接下断点

CreateFileA

断在系统函数中,然后ctrl+k查看调用栈,回溯到文件处理代码:

00401499   > \6A 00         push 0x0                                 ; /hTemplateFile = NULL
0040149B   .  68 80000000   push 0x80                                ; |Attributes = NORMAL
004014A0   .  6A 03         push 0x3                                 ; |Mode = OPEN_EXISTING
004014A2   .  6A 00         push 0x0                                 ; |pSecurity = NULL
004014A4   .  6A 00         push 0x0                                 ; |ShareMode = 0
004014A6   .  68 00000080   push 0x80000000                          ; |Access = GENERIC_READ
004014AB   .  68 F1354000   push noodles-.004035F1                   ; |FileName = "spook.key"
004014B0   .  E8 6F010000   call <jmp.&KERNEL32.CreateFileA>         ; \CreateFileA
004014B5   .  83F8 FF       cmp eax,-0x1
004014B8   .  0F84 99000000 je noodles-.00401557
004014BE   .  A3 E9354000   mov dword ptr ds:[0x4035E9],eax
004014C3   .  FF35 E9354000 push dword ptr ds:[0x4035E9]             ; /hFile = NULL
004014C9   .  E8 32010000   call <jmp.&KERNEL32.GetFileType>         ; \GetFileType
004014CE   .  68 FB354000   push noodles-.004035FB                   ; /pFileSizeHigh = noodles-.004035FB
004014D3   .  FF35 E9354000 push dword ptr ds:[0x4035E9]             ; |hFile = NULL
004014D9   .  E8 1C010000   call <jmp.&KERNEL32.GetFileSize>         ; \GetFileSize
004014DE   .  A3 ED354000   mov dword ptr ds:[0x4035ED],eax
004014E3   .  83F8 08       cmp eax,0x8                              ;  大小是否等于8?
004014E6   .  75 6F         jnz Xnoodles-.00401557
004014E8   .  6A 00         push 0x0                                 ; /pOverlapped = NULL
004014EA   .  68 FB354000   push noodles-.004035FB                   ; |pBytesRead = noodles-.004035FB
004014EF   .  50            push eax                                 ; |BytesToRead
004014F0   .  68 FF354000   push noodles-.004035FF                   ; |Buffer = noodles-.004035FF
004014F5   .  FF35 E9354000 push dword ptr ds:[0x4035E9]             ; |hFile = NULL
004014FB   .  E8 BE000000   call <jmp.&KERNEL32.ReadFile>            ; \ReadFile
00401500   .  85C0          test eax,eax
00401502   .  74 53         je Xnoodles-.00401557
00401504   .  33C0          xor eax,eax
00401506   .  FF35 E9354000 push dword ptr ds:[0x4035E9]             ; /hObject = NULL
0040150C   .  E8 A7000000   call <jmp.&KERNEL32.CloseHandle>         ; \CloseHandle
00401511   .  B8 FF354000   mov eax,noodles-.004035FF
00401516   .  C100 05       rol dword ptr ds:[eax],0x5
00401519   .  8300 0F       add dword ptr ds:[eax],0xF
0040151C   .  C148 04 07    ror dword ptr ds:[eax+0x4],0x7
00401520   .  8368 04 05    sub dword ptr ds:[eax+0x4],0x5
00401524   .  8178 04 BDD84>cmp dword ptr ds:[eax+0x4],0xC642D8BD
0040152B   .  75 2A         jnz Xnoodles-.00401557
0040152D   .  8138 FC098E2E cmp dword ptr ds:[eax],0x2E8E09FC
00401533   .  75 22         jnz Xnoodles-.00401557
00401535   .  68 88130000   push 0x1388
0040153A   .  68 94334000   push noodles-.00403394                   ; /Text = "Your keyfile is fine happy happy joy joy"
0040153F   .  68 8B130000   push 0x138B                              ; |ControlID = 138B (5003.)
00401544   .  FF75 08       push dword ptr ss:[ebp+0x8]              ; |hWnd
00401547   .  E8 62010000   call <jmp.&USER32.SetDlgItemTextA>       ; \SetDlgItemTextA
0040154C   .  8B25 BD334000 mov esp,dword ptr ds:[0x4033BD]
00401552   .^ E9 CBFDFFFF   jmp noodles-.00401322
00401557   >  6A 00         push 0x0                                 ; /Style = MB_OK|MB_APPLMODAL
00401559   .  68 63364000   push noodles-.00403663                   ; |Title = "Error!"
0040155E   .  68 6A364000   push noodles-.0040366A                   ; |Text = "Ketfile not present

or incorrect"
00401563   .  6A 00         push 0x0                                 ; |hOwner = NULL
00401565   .  E8 4A010000   call <jmp.&USER32.MessageBoxA>           ; \MessageBoxA
0040156A   .  6A 01         push 0x1                                 ; /ExitCode = 1
0040156C   .  E8 5F000000   call <jmp.&KERNEL32.ExitProcess>         ; \ExitProcess

可以看出这是一个很简单的数据运算过程,只要反推四步即可得到keyfile的内容。

以下上生成keyfile的c++代码:

#include <iostream>
#include <fstream>

using namespace std;

int main( void )
{
    unsigned int v1 = 0x2E8E09FC,v2 = 0xC642D8BD;

    __asm{
        push eax
        push ebx

        mov eax,v1
        mov ebx,v2

        sub eax,0xF
        ror eax,0x5

        add ebx,0x5
        rol ebx,0x7

        mov v1,eax
        mov v2,ebx

        pop ebx
        pop eax
    }

    ofstream out( "spook.key",ios::out | ios::binary | ios::trunc );
    if ( out.is_open() ){
        out.write( (const char *)&v1,4 );
        out.write( (const char *)&v2,4 );
    }
    else
        cout << "Open file failed." << endl;

    out.close();

    return 0;
}

给出可用的KeyFIle内容:

4F 70 74 69 63 61 6C 21 
时间: 2024-10-22 06:07:30

keyFile 巩固练习的相关文章

拆解cytom!c&#39;s 的keyFile保护

系统 : Windows xp 程序 : cytom!c's 程序下载地址 :http://pan.baidu.com/s/1nulAYBv 要求 : 伪造KeyFile 使用工具 :IDA & OD & Hex Workshop 可在看雪论坛中查找关于此程序的破文:http://bbs.pediy.com/showthread.php?t=30229 IDA载入程序,找出提示破解成功的字串“Valid Key file found!”并定位关键代码: 00426572 . BA 4C67

MongoDB副本集

简介 mongodb复制(replication)是将数据同步在多个服务器的过程.主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致.复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并保证数据的安全性.复制还允许您从硬件故障和服务中断中恢复数据. 而副本集(replica set)是从mongodb 1.6 提供的新功能,比复制功能要强大一些并增加了故障自动切换和自动修复成员节点,

为MongoDB添加身份验证

MongoDB 默认没有开户身份验证,除非不开放外网访问,否则这种模式极不安全,现纪录添加身份验证步骤如下: 配置创建用户的时候,需要关闭: #security:##副本集之间通信用到的认证文件# keyFile: /home/soft/mongodb-linux-x86_64-rhel62-3.4.2-shard2/mongo-key# clusterAuthMode: "keyFile"##开启身份验证# authorization: "enabled" 因为你

MongoDB迁移方案-冷备份+增量备份恢复

QQ群:465614686 1.  环境构建步骤 (1)线上环境 都是副本集模式 3个业务访问节点+1个隐藏节点 (隐藏节点做hadoop.spark数据同步使用以及数据报表查询等) (2)主机以及配置说明 10.21.18.21  primary节点    优先级为100 10.21.18.22  secondary节点  优先级为90 10.21.18.23  secondary节点  优先级为80 10.21.18.24  隐藏节点       优先级为0 系统配置:128G内存,64Co

Delphi组件indy 10中IdTCPServer修正及SSL使用心得

indy 10终于随着Delphi2005发布了,不过indy套件在我的印象中总是复杂并且BUG不断,说实话,不是看在他一整套组件的面子上,我还是喜欢VCL原生的Socket组件,简洁,清晰.Indy9发展到了indy10几乎完全不兼容,可叹啊.言归正传.在使用IdTCPServer组件的时候发现了他的漏洞,他的OnConnec,OnExecute,OnDisconnect等事件是在其他线程中执行的,通常情况下这没有问题,但是在特殊的情况下会造成问题,如果其他部分的程序写得有问题就会出现漏洞.

包管理工具rpm和yum的用法

包管理工具rpm和yum的用法 一.rpm的用法 rpm原本是Rde Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎.逐渐收到其他发行版的采用,RPM套件管理方式的出现,让Linux易于安装.升级,间接提升了Linux的适用性. rpm用法:rpm [OPTION...] 1.rpm安装软件包,后面需要跟上程序包文件的绝对路径或相对路径 常用选项: -v:显示指令的执行过程 -vv:详细显示指令执行过程,便于排错 -h:以#号显示程

使用自签的证书配置nginx的https

1.生成根证书密钥 #] openssl genrsa -des3 -out ca.key 2048 2.自签证书 #] openssl req -new -x509 -days 7305 -key ca.key -out ca.crt 参数说明: req: 生成证书签署请求 -news: 新请求 -key /path/to/keyfile: 指定私钥文件 -out /path/to/somefile: -x509: 生成自签署证书 -days n: 有效天数 3.准备必要文件: #] touc

III (二十三)OpenLDAP

目录服务: 目录是一类为了浏览和搜索数据而设计的特殊的数据库,目录服务是按照树状形式存储信息,目录包含基于属性的描述性信息,并且支持高级的过滤功能,如microsoft的active directory活动目录就是目录数据库的一种: a directory is like a phone book,and is not like a directory(folder) on your computer 一般目录不支持大多数事务型数据库所支持的高吞吐量和复杂的更新操作,目录进行更新操作是要么全部要

测试ReplicaSets读写分离和故障转移

读写分离实现步骤: 从库能够进行查询就更好了,这样可以分担主库的大量的查询请求. 1) 先向主库中插入一条测试数据 rs1:PRIMARY> db.c1.insert({age:30});db.c1.insert({age:30}); WriteResult({ "nInserted" : 1 }) rs1:PRIMARY>  db.c1.find() db.c1.find() { "_id" : ObjectId("5791ef011f4c6