|
[招聘]阿里 安全部 情报分析
up . |
|
[招聘]阿里 安全部 情报分析
已更新联系邮箱 |
|
|
|
|
|
[2013礼物]《看雪论坛精华12》发布下载!
新年快乐,强烈支持一下。 |
|
CFileDialog类源代码问题?
以'\0'作为多个字符串分割符,当字符串长度为0时表示结束。 如 需要表示多个字符串 ".ZIP", ".TXT" 在此字符串中的存储为 ".ZIP\0.TXT\0\0" |
|
[分享&挑战]sekurlsa.dll逆向分析challenge(可能发现windows系统账号存储机制的小秘密)
简单分析了下,DLL本身没有解密代码,结合了两个DLL获取了密码的原文。 有兴趣的同学,可以继续深入分析。 这里给出我分析几个点 1 通过 LsaEnumerateLogonSessions() 获取活动Session的LUID 2 在模块 wdigest 中 .text:7EAC538A 008 8B 0D AC E2 AC 7E mov ecx, ?l_LogSessList@@3U_LIST_ENTRY@@A ; _LIST_ENTRY l_LogSessList .text:7EAC5390 008 8B 45 08 mov eax, [ebp+arg_0] .text:7EAC5393 008 89 08 mov [eax], ecx .text:7EAC5395 008 C7 40 04 AC E2 AC 7E mov dword ptr [eax+4], offset ?l_LogSessList@@3U_LIST_ENTRY@@A ; _LIST_ENTRY l_LogSessList 获取导出变量地址 ?l_LogSessList@@3U_LIST_ENTRY@@A ; _LIST_ENTRY l_LogSessList l_LogSessList 变量地址 sekurlsa 10035868 3 遍历l_LogSessList 得到 指定LUID的密码密文。 枚举列表处理地址 sekurlsa 10014B80 4 调用在模块 lsasrv 中 内部函数LsaUnprotectMemory进行解密 LsaUnprotectMemory函数指针保存在 sekurlsa 10035870 佩服作者对系统安全机制的研究深度 PS: getWDigest导出函数也可以获取密码。 不早了,明天还要Working。 |
|
[讨论]刘涛涛宣布,开发出世界上第一款"能读懂程序"的程序
编译原理中的 LEX + YACC + ??? |
|
分享我的经历
开个VPN服务吧 |
|
微软杯Exploit Me安全调试技术挑战赛 赛题
首 页 标 记 |
|
[求助]我真的想去自杀!
希望这是个圣诞节的玩笑。 |
|
[招聘]北京盛安怡和公司招聘开发人员
顶一个,这个一定要给力支持 |
|
[原创][第三阶段 第一题] 答题
忘了提交 |
|
关于vs2010的reloc
Linker 时加参数 /FIXED 参考 http://msdn.microsoft.com/zh-cn/library/w368ysh2%28v=VS.100%29.aspx |
|
[讨论]第三题,抛砖引玉
我也一段Name的计算代码 int sub_4078E0(char* a0) { char *p = a0; while (*p) { p++; p++; if (*(p-1) == '\0') { return p-a0-1; } p++; if (*(p-1) == '\0') { return p-a0-1; } p++; if (*(p-1) == '\0') { return p-a0-1; } } return p+1-a0-1; } char *memcpy_r(char* a0, char* a4, int a8) { char *p = a0; while (a8>0) { *p = *(a4-a0+p); p++; a8--; } return a0; } int bswap(int n) { _asm { mov eax, n bswap eax mov n, eax } return n; } void my_sha1_compile(sha1_ctx ctx[1]) { sha1_compile(ctx); return; } void my_sha1_hash(sha1_ctx ecx[1], char* a0, int a4) { int eax = ((ecx->count[0]>>3) & 0x3f); ecx->count[0] += a4*8; if (ecx->count[0] < (sha1_32t)a4*8) { ecx->count[1]++; } ecx->count[1] += (a4>>29); if (a4 < (0x40 - eax)) { memcpy_r((char*)ecx->wbuf+eax, a0, a4); return; } memcpy_r((char*)ecx->wbuf+eax, a0, (0x40 - eax)); my_sha1_compile(ecx); int va4 = (0x40 - eax); int ebp = va4+0x3f; char* ebx = (char*)ecx->wbuf+0x100; if (ebp < a4) { do { my_sha1_compile(ecx); va4 += 0x40; ebp += 0x40; ebx += 0x100; } while(ebp < a4); } memcpy_r((char*)ecx->wbuf, a0+va4, a4-va4); return; } void my_sha1_end(sha1_ctx ecx[1], char* a0) { char v1c[8] = {0}; *(int*)(v1c+4) = ecx->count[0]; *(int*)(v1c) = ecx->count[1]; int ecx1; for (ecx1=0; ecx1<2; ecx1++) { *(int*)(v1c+ecx1*4) = bswap(*(int*)(v1c+ecx1*4)); } sha1_32t i = (sha1_32t)((ecx->count[0]>>3) & 0x3f); static char s_byte_40CD50[64] = {'\x80'}; my_sha1_hash(ecx, s_byte_40CD50, (i<56?56-i:120-56)); my_sha1_hash(ecx, v1c, 8); char v14[20]; for (ecx1=0; ecx1<5; ecx1++) { *(int*)(v14+ecx1*4) = bswap(ecx->hash[ecx1]); } memcpy_r(a0, v14, 20); memset(ecx->hash, 0, 20); return; } bool sub_401000(int ecx, char *edi, char *a0) { char v30[32+12] = {0}; if (edi == NULL || a0 == NULL) { return false; } DWORD dwVolumeSerialNumber; GetVolumeInformationA("C:\\", NULL, 0, &dwVolumeSerialNumber, NULL,NULL, NULL, 0); memcpy_r(v30, a0, ecx); *(DWORD*)(v30+ecx) = dwVolumeSerialNumber; memcpy_r(v30+ecx+4, "Tencent", sub_4078E0("Tencent")); sha1_ctx v8c; sha1_begin(&v8c); v8c.hash[0] = 0xB1CAB1CA; v8c.hash[1] = 0xCCBFCCBF; v8c.hash[2] = 0xBFB2D6BE; v8c.hash[3] = 0xF8C7D8B5; v8c.hash[4] = 0xEEC7BCCD; my_sha1_hash(&v8c, v30, ecx+11); my_sha1_end(&v8c, edi); return true; } sha1系列函数的代码,到网上搜吧 |
|
[讨论]第三题,抛砖引玉
我也来一段计算的代码 void GetCode(unsigned char p[20], char code[32]) { int ebp = 0; int ebx = 0; int esi = 0; char str[33] = "ABCDEFGHJKMNPQRSTVWXYZ1234567890"; int flag[][2] = { {0xF8, -3}, {0x07, 2}, //+ {0xC0, -6}, {0x3E, -1}, {0x01, 4}, //+ {0xF0, -4}, {0x0F, 1}, //+ {0x80, -7}, {0x7C, -2}, {0x03, 3}, //+ {0xE0, -5}, {0x1F, 0}, //+ {0xF8, -3}, {0x07, 2}, //+ {0xC0, -6}, {0x3E, -1}, {0x01, 4}, //+ {0xF0, -4}, {0x0F, 1}, //+ {0x80, -7}, {0x7C, -2}, {0x03, 3}, //+ {0xE0, -5}, {0x1F, 0}, //+ {0xF8, -3}, {0x07, 2}, //+ {0xC0, -6}, {0x3E, -1}, {0x01, 4}, //+ {0xF0, -4}, {0x0F, 1}, //+ {0x80, -7}, {0x7C, -2}, {0x03, 3}, //+ {0xE0, -5}, {0x1F, 0}, //+ {0xF8, -3}, {0x07, 2}, //+ {0xC0, -6}, {0x3E, -1}, {0x01, 4}, //+ {0xF0, -4}, {0x0F, 1}, //+ {0x80, -7}, {0x7C, -2}, {0x03, 3}, //+ {0xE0, -5}, {0x1F, 0}, //+ }; int t20 = 0; int t32 = 0; int da = 0; while (esi<20) { t20 |= flag[ebx][0]; t32 |= flag[ebx][1]>0?(flag[ebx][0]<<flag[ebx][1]):(flag[ebx][0]>>-flag[ebx][1]); int t = (flag[ebx][0]&p[esi]); da |= flag[ebx][1]>0?(t<<flag[ebx][1]):(t>>-flag[ebx][1]); if (t20==0xff) { t20 = 0; esi++; } if (t32==0x1f) { code[ebp] = str[da]; ebp++; da = 0; t32 = 0; } ebx++; } } |
|
|
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值