Może kogoś zainteresuje: moja (mocno) techniczna i dość niskopoziomowa analiza ostatniej kampanii stealerów .NETowych: https://cert.pl/en/posts/2023/09/unpacking-whats-packed-dotrunpex/.
W skrócie: ostatnio analizowałem próbkę malware z jednej kampanii którą obserwowaliśmy w pracy. Okazało się że jest dość mocno obfuskowana, a nasze automaty akurat sobie nie radziły, więc trzeba było ją odpakować (zdjąć warstwę obfuskatora) samemu. Ostatecznie znalazłem dobry sposób na wypakowywanie próbek, ale tylko dynamiczny, tzn. wymagał debuggera. Umiałem to zrobić ręcznie, pozostało tylko ten proces zautomatyzować...
...Ostatecznie wyszło na to że napisałem własny debugger (no dobra, bibliotekę do debugowania) do .NETa. Wiem że brzmi absurdalnie, ale z róznych powodów żadne istniejące rozwiązanie nie spełniało moich wymagań (były dwa: żeby działał, oraz żeby dało się go zautomatyzować/oskryptować). Może i dośc niszowe narzędzie, ale też się nim podzieliliśmy: https://github.com/CERT-Polska/dbglib. Jakby ktoś przypadkiem miał kiedyś podobny problem ;).
Myślałem, żeby tam podesłać PR z konfiguracją dockerową, ale najpierw musiałbym lepiej zapoznać z tech stackiem, jaki jest użyty w tym projekcie. Może w wolnej chwili spróbuję się pobawić :-).
No to podpinaj domenę i robimy konkurencję :) Tylko 50000 punktów reputacji dla mnie :)
Znudzony abstrakcjami w Javie? Uważasz że C to język wysokiego poziomu? Pisanie w asemblerze jest dla Ciebie za proste? Kod maszynowy czytasz jak prozę, a tablicę opkodów znasz lepiej niż tabliczkę mnożenia?
Może czas zejść poziom niżej?
Przez święta stwierdziłem że koniec z tymi silikonowymi abstrakcjami, i czas stworzyć własne (proste) CPU- przy pomocy FPGA.
Na screenie wynik działania prostego programu, zdefiniowanego przez statyczny RAM:
signal Memory: MemoryStore := (
0 => X"0302", -- LDL A, 2
1 => X"0401", -- LDL B, 1
2 => X"2334", -- ADD A, B
3 => X"0E02", -- JMP 02
others => X"0000"
);
Kilka słów wytłumaczenia:
a=2; while (true) { a += 1}
0 -> LDL A Imm16 (load low 8 bits of register)
1 -> LDH A Imm16 (load high 8 bits of register)
2 -> ADD A B C (A = B + C)
3 -> SUB A B C (A = B - C)
4 -> MUL A B C (A = B * C)
5 -> DIV A B C (A = B / C)
6 -> XOR A B C (A = B ^ C)
7 -> OR A B C (A = B | C)
8 -> AND A B C (A = B & C)
9 -> CMV A B C (if ((C & FLAGS) != 0) { A = B; })
A -> LDM A B Imm8 (A = RAM[A + C])
B -> STM A B Imm8 (RAM[A + C] = B)
0 -> NULL (jak w MIPS - zawsze zero)
1-13 -> general purpose registers
14 -> instruction pointer
15 -> flags
FETCH -> DECODE -> REGREAD -> ARITH -> WRITEBACK
. W planach jest skrócenie tego (format instrukcji jest prosty, więc DECODE jest niepotrzebne) i dodanie superskalarności (wykonywanie 2 instrukcji na raz).Morał: Można niżej niż asembler. Można niżej niż kod maszynowy. ...czy warto? Na pewno napisanie własnego procesora to ciekawe doświadczenie :P. Nie udało mi się go jeszcze wypalić na fizycznej płytce (posiadam takową - programowalną tylko z tego obrzydliwego xilinxa), razem z memory-mapped IO, ale prędzej czy później...
@woolfik pisał że wpisy na mikroblogu za mało techniczne, więc pochwalę się czymś swoim: :P
analiza nymaim
a, popularnego ostatnio trojana bankowego: https://www.cert.pl/news/single/nymaim-atakuje-ponownie/
#malware #reverse-engineering
Kto jest najszczęśliwszym użytkownikiem forum? Jak bardzo postinkrementacja rozpleniła się w dziale C++? Na te i inne pytania odpowie wątek Spóźnione wykresy za 2015 rok
@furious programming lepiej zmienić nazwę języka bo nawet ona jest za postinkrementacją :D
Samodzielne IDE do C# od JetBrains (ciekawostka):
http://blog.jetbrains.com/dotnet/2016/01/13/project-rider-a-csharp-ide/
@GThoro: Bardzo ciekawe. Moja Intelij IDEA w wersji ultimate z wieloma pluginami do frameworków na start bierze 350MB.
@krzysiek050: No widzisz, a mój trial PHPStorm'a na start łyka 1GB. Może to taki feature triala - zniechęcić usera wysokim zużyciem pamięci :) Poza tym Android Studio też tak łyka RAM jak pelikan :/. Oba IDE oparte są IntelliJ.
Napisałem na ten temat 7 lat temu odpowiedź,nie zdezaktualizowała się za bardzo (poz...
Napisałem na ten temat 7 lat temu odpowiedź,nie zdezaktualizowała się za bardzo (poz...
Napisałem na ten temat 7 lat temu odpowiedź,nie zdezaktualizowała się za bardzo (poz...
Lista kroków do nauki cyberbezpieczeństwo: Przestać używać słowa cyber. Większość (w...
Ok, dostajemy program Protector.exe. On prosi o jakieś hasło, i dekryptuje bazę albo...
Może kogoś zainteresuje: moja (mocno) techniczna i dość niskopoziomowa analiza ostat...
Może kogoś zainteresuje: moja (mocno) techniczna i dość niskopoziomowa analiza ostat...
Może kogoś zainteresuje: moja (mocno) techniczna i dość niskopoziomowa analiza ostat...
Może kogoś zainteresuje: moja (mocno) techniczna i dość niskopoziomowa analiza ostat...
Może kogoś zainteresuje: moja (mocno) techniczna i dość niskopoziomowa analiza ostat...
Ja miałem w planach stworzyć toolsy do gdb/lldb, uzupełnić te narzędzia w lepszy nowoczesny sposób analizowania procesów, brakuje tam dobrego tracingu, ogólnie wiele rzeczy jest tak upierdliwych w analizowaniu, a myślę że szło by zautomatyzować i uprościć analizę softwaru, mam kilka pomysłów co mogło by mega uprościć wszystko, jeśli nie mielibyśmy dostępu do kodu źródłowego, a chcielibyśmy wiedzieć jak coś działa.