|
|
|
|
|
[求助]如何制作VS绿色版?
非常感谢你的回复,我有下载过Inno Setup去尝试过了,要不然我也提取不出cntrump大侠绿色版的安装文件。您又让我知道有这么一个东西Total Uninstall,我去研究研究。感谢~ |
|
|
[求助]如何制作VS绿色版?
不知道大侠能否指点一下呢?百度上面也搜索不到制作教程。解包cntrump的绿色版,可是看到很多文件不知道是哪里提取出来的。 |
|
|
|
|
|
[原创]一个可拦截DR,CR,Int 1, Int3操作的VT驱动
windbg调试不了root模式的代码,VT拦截INT 1,再调试VT root的代码的时候,整个VM就会死掉了。 以前看三寸法神(师)的无限硬件中断的时候偿试过用windbg+VMware调试root的代码。 |
|
|
|
|
|
|
|
|
[求助]一个算法只有8行汇编代码的CM,前辈们来指点一下。
嗯,你是渣渣,渣渣把序列号算出来了,那我就是连渣渣也不如了,借你家墙给我撞几下 二楼的方法,管用吗?还是误导人的? 我尝试过先减去0X87654321,然后减去一个ASCII码值,可是并不知道是否产生进位,前面的RCL也是根据EDX + 0X12345678,产生的进位来移位的,这里就又难住了,无法再住后继续了 |
|
|
[求助]一个算法只有8行汇编代码的CM,前辈们来指点一下。
感谢提醒,确实有问题,改了一下。 char *pszSerial = "12345678910"; char aChar; unsigned long long res = 0; while (aChar = *pszSerial++) { res += 0x12345678; res = res << 1 | res >> 32; res += aChar + (res >> 32 & 1); res = res + 0x87654321 & 0xffffffff; } printf("%08X\n", (unsigned)res); 不过,兄弟你还没告诉我怎样算出来的序列号呢. |
|
|
|
|
|
[求助]汇编转VC++
[QUOTE=heihu;1403696]不好意思,刚调试了下,你说的不能解密是最后部分不能解密,少了一个判断,完整的解密是这样的 unsigned short uKey=0x27; for (size_t i = 0; i < m_unencrypte.GetLength()/2; i++) { nHex[i] = ...[/QUOTE] 异或加解密都是需要同一个key,并不需要什么乘法逆运算,只需要把明文当作key来重新异或就行了 |
|
|
[求助]汇编转VC++
unsigned char arrSrc[] = { 0x68, 0x72, 0x6E, 0xE1, 0xBA, 0x98, 0x21, 0x72, 0x96, 0x68, 0x1F, 0x0B, 0xDF, 0x97, 0x69, 0x8D, 0x87, 0x56, 0x38, 0x23, 0xEC, 0x66, 0xAD, 0x8D, 0x78, 0x82, 0x6C, 0xA6, 0x7D, 0xA5, 0x38, 0xC8, 0x4B, 0xEC, 0x69, 0x0D, 0x90, 0x40, 0x8C, 0xD5, 0x3F, 0xD4, 0x49, 0x01, 0x16, 0xA3, 0xF2, 0x73, 0xD1, 0x25, 0x56, 0x70, 0x4B, 0x5F, 0x9C, 0xDE, 0xA2, 0x7A, 0x99, 0xAA, 0x4B, 0x23, 0x6E, 0xC1, 0x46, 0x49, 0xC8, 0x2F, 0xA3, 0xF8, 0x2A, 0xDE, 0xF1, 0x82, 0x9F, 0xD8, 0x82, 0x3E, 0xFA }; unsigned char arrDst[sizeof(arrSrc)]; /* 函数名: Decrypt [参数] chClearData : 输出缓冲区,接收解密成明文的数据; chCipherDta : 输入缓冲区,接受待解密的密文数据; count : 密文长度; [返回值] 返回明文数据的缓冲区地址; */ unsigned char* Decrypt(unsigned char* chClearData, unsigned char* chCipherData, size_t count, unsigned short uKey) { for (size_t i = 0; i < count; ++i) { chClearData[i] = chCipherData[i] ^ uKey >> 8; uKey = (chClearData[i] + uKey) * 0xA761 + 0x87B3; } return chClearData; } //解不出来,上面是我的代码,楼主知道哪里出问题了一定要记得告诉我啊。 |
|
|
[求助]汇编转VC++
我反汇编阅读能力不强,我试写了一个解密函数,来一段密文我看看,我的能不能解出来. |
|
|
[原创][更新2015.11.09]OD反汇编引擎插件 和 硬件条件记录断点插件
00A305C6 > \8D45 D8 LEA EAX,DWORD PTR SS:[EBP-0x28] 00A305C9 . C645 FC 01 MOV BYTE PTR SS:[EBP-0x4],0x1 00A305CD F3 DB F3 //这个识别不出来 00A305CE . 0F6F05 046AD600 MOVQ MM0,QWORD PTR DS:[0xD66A04] 00A305D5 . 50 PUSH EAX 00A305D6 . 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-0x20] 00A305D9 . 50 PUSH EAX 00A305DA . 68 7862D600 PUSH 00D66278 00A305DF . 56 PUSH ESI 00A305E0 . F30F7F45 E0 MOVDQU DQWORD PTR SS:[EBP-0x20],XMM0 //这个识别出来了 上面识别不出来的地方要从模块中删除分析才能识别出来,crtl+A分析代码的时候识别不出来。 |
|
|
[分享]再放个CrackMe给新手玩玩 (II)
777E0100 KiUserExceptionDispatcher /$ FC CLD 777E0101 |. 8B4C24 04 MOV ECX,DWORD PTR SS:[ESP+0x4] 777E0105 |. 8B1C24 MOV EBX,DWORD PTR SS:[ESP] 777E0108 |. 51 PUSH ECX ; pContext 777E0109 |. 53 PUSH EBX ; pExceptionRecord 777E010A |. E8 0BB40400 CALL <_RtlDispatchException@8> 777E010F |. 0AC0 OR AL,AL 777E0111 |. 74 0C JE SHORT 777E011F 777E0113 |. 5B POP EBX 777E0114 |. 59 POP ECX 777E0115 |. 6A 00 PUSH 0x0 777E0117 |. 51 PUSH ECX 777E0118 |. E8 63FD0000 CALL ZwContinue 777E011D |. EB 0B JMP SHORT 777E012A 777E011F |> 5B POP EBX 777E0120 |. 59 POP ECX 777E0121 |. 6A 00 PUSH 0x0 777E0123 |. 51 PUSH ECX 777E0124 |. 53 PUSH EBX 777E0125 |. E8 52140100 CALL ZwRaiseException 777E012A |> 83C4 EC ADD ESP,-0x14 777E012D |. 890424 MOV DWORD PTR SS:[ESP],EAX 777E0130 |. C74424 04 01000000 MOV DWORD PTR SS:[ESP+0x4],0x1 777E0138 |. 895C24 08 MOV DWORD PTR SS:[ESP+0x8],EBX 777E013C |. C74424 10 00000000 MOV DWORD PTR SS:[ESP+0x10],0x0 777E0144 |. 54 PUSH ESP 777E0145 |. E8 DEB80400 CALL RtlRaiseException 777E014A \. C2 0800 RETN 0x8 这和系统分发异常有关,在调试器不处理异常或者没有调试器的情况下,系统内核(注意是系统内核,也就是R0调试子系统)就会把控制返回给KiUserExceptionDispatcher函数,然后KiUserExceptionDispatcher开始搜索有没有安装向量化异常,没有安装或者没有处理,就继续搜索SEH(与线程相关的),SEH也没有处理的话就搜索有没有调用SetUnhandledExceptionFilter安装的异常……挺复杂的,我也说不清楚,你去看一下专业的书籍或者其它前辈的文章,比我说的清楚多了。《软件调试》一书中也有介绍。 |
|
|
[分享]再放个CrackMe给新手玩玩 (II)
可以的,WIN7 64位系统请看下面这里 //检测是否有调试器存在 0018F610 76ED9922 /CALL 到 ZwQueryInformationProcess 来自 kernel32.76ED991C 0018F614 FFFFFFFF |hProcess = FFFFFFFF 0018F618 00000007 |InfoClass = 0x7 0018F61C 0018F628 |Buffer = 0018F628 //检测结果输出到这里,结果为FFFFFFFF检测到被调试,结果为0没检测到,函数返回后把FFFFFFFF改0 0018F620 00000004 |Bufsize = 0x4 0018F624 00000000 \pReqsize = NULL 函数返回后,把BUFFER的值改为0,然后00401255下断点,就可以来到异常处理函数了。 |
|
|
[分享]再放个CrackMe给新手玩玩 (II)
//程序开始会安装一个异常处理程序,cm1.00401255是异常处理的函数地址 0018FF78 00401348 /CALL 到 SetUnhandledExceptionFilter 来自 cm1.00401346 0018FF7C 00401255 \pTopLevelFilter = cm1.00401255 //输入序列号点OK 0040119F 6A 14 PUSH 0x14 004011A1 68 1D304000 PUSH 0040301D ; ASCII "123456789" 004011A6 68 E9030000 PUSH 0x3E9 004011AB FF75 08 PUSH DWORD PTR SS:[EBP+0x8] 004011AE E8 57020000 CALL <JMP.&user32.GetDlgItemTextA> ; 获取序列号 004011B3 A3 35304000 MOV DWORD PTR DS:[0x403035],EAX 004011B8 83F8 14 CMP EAX,0x14 004011BB 77 47 JA SHORT 00401204 004011BD 05 78563412 ADD EAX,0x12345678 004011C2 D1D8 RCR EAX,1 004011C4 83D0 30 ADC EAX,0x30 004011C7 3D 11111111 CMP EAX,0x11111111 004011CC ^ 76 EF JBE SHORT 004011BD 004011CE 0305 51124000 ADD EAX,DWORD PTR DS:[0x401251] 004011D4 A3 51124000 MOV DWORD PTR DS:[0x401251],EAX ;代码段是只读属性,对代码段写入会产生异常 //检测是否有调试器存在 0018F610 76ED9922 /CALL 到 ZwQueryInformationProcess 来自 kernel32.76ED991C 0018F614 FFFFFFFF |hProcess = FFFFFFFF 0018F618 00000007 |InfoClass = 0x7 0018F61C 0018F628 |Buffer = 0018F628 //检测结果输出到这里,结果为FFFFFFFF检测到被调试,结果为0没检测到,函数返回后把FFFFFFFF改0 0018F620 00000004 |Bufsize = 0x4 0018F624 00000000 \pReqsize = NULL //程序回到开始安装的异常处理函数处理异常cm1.00401255 //计算用户名 00401286 /EB 10 JMP SHORT 00401298 00401288 |8D0480 LEA EAX,DWORD PTR DS:[EAX+EAX*4] 0040128B |8D0C00 LEA ECX,DWORD PTR DS:[EAX+EAX] 0040128E |0FBE07 MOVSX EAX,BYTE PTR DS:[EDI] 00401291 |32C1 XOR AL,CL 00401293 |03C8 ADD ECX,EAX 00401295 |8BC1 MOV EAX,ECX 00401297 |47 INC EDI 00401298 \803F 00 CMP BYTE PTR DS:[EDI],0x0 0040129B ^ 75 EB JNZ SHORT 00401288 //将字符串序列号转换为数值 004012A7 /EB 10 JMP SHORT 004012B9 004012A9 |8D0480 LEA EAX,DWORD PTR DS:[EAX+EAX*4] 004012AC |8D0C00 LEA ECX,DWORD PTR DS:[EAX+EAX] 004012AF |0FBE07 MOVSX EAX,BYTE PTR DS:[EDI] 004012B2 |2C 30 SUB AL,0x30 004012B4 |03C8 ADD ECX,EAX 004012B6 |8BC1 MOV EAX,ECX 004012B8 |47 INC EDI 004012B9 \803F 00 CMP BYTE PTR DS:[EDI],0x0 004012BC ^ 75 EB JNZ SHORT 004012A9 004012BE 5B POP EBX 004012BF 3BC3 CMP EAX,EBX ;比较用户名和序列号 //取DOS头的标志MZ,'M'-0x13,'Z'-0x31.变成字符":)" 004012C3 8B0D 39304000 MOV ECX,DWORD PTR DS:[0x403039] ; cm1.00400000 004012C9 0FB701 MOVZX EAX,WORD PTR DS:[ECX] 004012CC 2C 13 SUB AL,0x13 004012CE 80EC 31 SUB AH,0x31 004012D1 66:A3 A3304000 MOV WORD PTR DS:[0x4030A3],AX 004012D7 6A 00 PUSH 0x0 004012D9 68 A3304000 PUSH 004030A3 004012DE 68 A3304000 PUSH 004030A3 004012E3 6A 00 PUSH 0x0 004012E5 FF15 55304000 CALL DWORD PTR DS:[0x403055] ; user32.MessageBoxA //算法大概就这样 void main() { int t = 0; char szUserName[] = "iscc2015"; for ( int i=0; szUserName[i]!=0; i++ ) { t = (BYTE)(t * 10 ^ szUserName[i]) + t * 10; } printf( "%d", t ); } 由于我的系统是WIN7 64位,SOD等一些强大插件的驱动不起作用才会被反调试,32位系统加载SOD驱动之后,此反调试应该没效果了,有哪里说的不对的地方,大家指正就好,不要扔砖头啊。 |
|
|
[原创]肯定会有许多新手会遇到此问题,来看"爆破我"
兄弟的程序只是把成功的窗口隐藏起来了,点击的时候就把失败的窗口给显示出来。只要把显示失败替换成显示成功的就会全部显示成功了。 语文从来没及格,表达能力特别差,不知道兄弟能否看明白? |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
勋章
兑换勋章
证书
证书查询 >
能力值