ttbbs 发表于 2021-11-21 15:31

本人的第一个,一个奇怪的cm,有反调试和不算花指令的花指令

本帖最后由 ttbbs 于 2021-11-27 16:43 编辑

成功案例(需要控制台运行)

自己觉得有点难,期待大佬来挑战
目前只有人爆破,但希望给出算法

你们要的源码:

#include <iostream>
#include <cstdio>
#include <windows.h>
#include <time.h>

typedef NTSTATUS(NTAPI* pfnNtSetInformationThread)(_In_ HANDLE ThreadHandle, _In_ ULONG ThreadInformationClass,
    _In_ PVOID ThreadInformation, _In_ ULONG ThreadInformationLength);
int tii;
void anti_debug_by_HideFromDebugger(void) {
    HMODULE ntdll = LoadLibrary(TEXT("ntdll.dll"));
    if (ntdll == NULL) {
      abort();
    }

    pfnNtSetInformationThread ntSetInfoThread = (pfnNtSetInformationThread)GetProcAddress(ntdll, "NtSetInformationThread");
    if (ntSetInfoThread == NULL) {
      abort();
    }

    ntSetInfoThread(GetCurrentThread(), 0x11, NULL, 0);

}
void anti_debug_by_CheckRemoteDebuggerPresent(void) {
    BOOL isRemoteDebuggerPresent = FALSE;
    if (CheckRemoteDebuggerPresent(GetCurrentProcess(), &isRemoteDebuggerPresent)) {
      if (isRemoteDebuggerPresent == TRUE) {
            ExitProcess(0);

      }
    }
}
int ti() {
    return int(clock());
}
int checker() {
    __asm {
      call anti_debug_by_CheckRemoteDebuggerPresent
      pushad
      push s6
      mov ecx, s5
      mov eax, 0xC3000000
      s5:mov ebx, ecx
      cmp ecx, 0x0
      je junkcode3
      sub ecx, 0x1
      jmp ebx

      junkcode3 :
      clc
            cmc
            mov eax, 0
            jmp junkcode4

            s6 : add eax, s4 - 0xC3000000
            mov ecx, s7
            mov edx, 0xD0FF1716
            s7 : mov ebx, ecx
            sub ebx, 4
            cmp ecx, 0x0
            je junkcode4
            sub ecx, 0x1
            jmp ebx

            junkcode4 :
      clc
            cmc
            mov eax, 1

            jmp junkcode3

            s4 : add esp, 0x4
            popad
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            shl tii,2
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            clc
            cmc
            


    }
    anti_debug_by_HideFromDebugger();
}
int main()
{
    int ps;
    tii = ti();
    int tii1 = ti();
    checker();
    __asm {
      call anti_debug_by_CheckRemoteDebuggerPresent
      pushad
      push s2
      mov ecx, s1
      mov eax, 0xC3000000
      s1:mov ebx, ecx
      cmp ecx, 0x0
      je junkcode
      sub ecx, 0x1
      jmp ebx

      junkcode :
      clc
            cmc
            mov eax, 0
      jmp junkcode2

            s2 : add eax, s4 - 0xC3000000
            mov ecx, s3
            mov edx, 0xD0FF1716
            s3 : mov ebx, ecx
            sub ebx, 4
            cmp ecx, 0x0
            je junkcode2
            sub ecx, 0x1
            jmp ebx

            junkcode2 :
      clc
            cmc
            mov eax,1

            jmp junkcode

            s4 : add esp, 0x4
            popad
    }
    if (clock() - tii1 > 1000) ExitProcess(0);
    std::cout << "password?";

    std::cin >> ps;
    tii = tii + tii1;
    if (ps == tii) {
      std::cout << "success";
    }
    else
    {
      ExitProcess(0);
    }
}

wanlinwo 发表于 2021-11-23 08:45

chenyouyou 发表于 2021-11-23 10:51

czyr 发表于 2021-11-21 18:59

不整了直接上吧

ttbbs 发表于 2021-11-21 19:45

czyr 发表于 2021-11-21 18:59
不整了直接上吧

爆破?希望能给出算法哦!

czyr 发表于 2021-11-21 20:28

ttbbs 发表于 2021-11-21 19:45
爆破?希望能给出算法哦!

能爆破的要算法有什么意义

搜索曾经的回忆 发表于 2021-11-21 20:40

没看懂什么意思,确定跟输入内容有关?

gaomenggao 发表于 2021-11-22 11:12

ttbbs 发表于 2021-11-22 11:25

gaomenggao 发表于 2021-11-22 11:12
能破解的要算法有什么意义?

请不要恶意灌水,发之前的人发过的

搜索曾经的回忆 发表于 2021-11-22 20:23

能否公布下原理

ttbbs 发表于 2021-11-22 20:51

本帖最后由 ttbbs 于 2021-11-22 20:54 编辑

搜索曾经的回忆 发表于 2021-11-22 20:23
能否公布下原理
周末发源码,主要是靠读取时间经过运算得密码,再与输入的密码做比对
页: [1] 2
查看完整版本: 本人的第一个,一个奇怪的cm,有反调试和不算花指令的花指令