Я не могу понять реверс-инжиниринг ...
Первый шаг - понять, как создана программа.
Прежде чем вы сможете понять, как отменить программу, вы должны понять, как она компилируется и собирается; обращение двоичного файла, созданного для Windows, сильно отличается от обращения двоичного файла для системы * nix.
К тому же, поскольку вы используете Visual Studio, вы можете увидеть этот ответ (вариант 2) , объясняющий, как включить вывод сборки в вашем коде. В качестве альтернативы, если вы компилируете через командную строку, вы можете передать /FAs
и /Fa
, чтобы сгенерировать сборку, встроенную в источник.
Ваш код производит следующую сборку:
; Listing generated by Microsoft (R) Optimizing Compiler Version 18.00.40629.0
TITLE C:\Code\test\test.cpp
.686P
.XMM
include listing.inc
.model flat
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES
CONST SEGMENT
$SG2548 DB 'hello matthew', 00H
CONST ENDS
PUBLIC _main
; Function compile flags: /Odtp
; File c:\code\test\test.cpp
_TEXT SEGMENT
_x$ = -8 ; size = 4
_str$ = -4 ; size = 4
_main PROC
; 2 : {
push ebp
mov ebp, esp
sub esp, 8
; 3 : char* str = "hello matthew";
mov DWORD PTR _str$[ebp], OFFSET $SG2548
; 4 :
; 5 : int x = 15;
mov DWORD PTR _x$[ebp], 15 ; 0000000fH
; 6 :
; 7 : return 0;
xor eax, eax
; 8 : }
mov esp, ebp
pop ebp
ret 0
_main ENDP
_TEXT ENDS
END
Хотя это полезно для понимания того, как и что делает ваш код, один из лучших способов начать реверсирование - это сгенерировать двоичный файл в отладчике, например, присоединить Visual Studio к исполняемому файлу и просмотреть сборку как программу. работает.
Это может зависеть от того, что вы после, поскольку двоичный файл потенциально может быть запутан; это значит, что в двоичном файле могут быть строки, но они могут быть зашифрованы или просто зашифрованы так, чтобы их нельзя было прочитать, пока они не будут расшифрованы / расшифрованы какой-либо функцией в двоичном файле.
Так что простой поиск строк не обязательно даст вам что-либо, а попытка найти конкретное двоичное значение в собранном коде - это все равно, что найти иголку в стопке игл. Знайте, почему вы пытаетесь обратить программу назад, а затем атаковать этот вектор.
Кто-нибудь знает, почему я не могу найти эту строку или значение 15 в исполняемом файле, когда разбираю его?
Как уже упоминалось, и, как вы уже догадались, искомый двоичный файл, который вы просматриваете, был оптимизирован, и компилятор просто удалил неиспользуемые переменные, поэтому сборка по существу возвращала 0.
Надеюсь, это поможет.