Tersine Kod Mühendisliği

Başlatan Reverser, 03 Kasım 2014 - 20:34:00

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

7hr33l3t73r

Tamsayi tasmasi(integer overflow) google da aratirsaniz size yerince bilgi sunacaktir.
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

betseg

#526
Ben o sayıyı -40 olarak şeyetmiştim :) İnsan bir konuda iyi olunca basit şeylere bakmayıp karmaşığa dalıyor demek ki :)

O denklemler de Celsius ve Fahrenheit çevirisi, -40 Celsius ve -40 Fahrenheit aynı. Her şeye unsigned bakmayın :P

7hr33l3t73r

#527
Insan bos kalmaya gorsun.Ibini dibini kurcaliyor yazilimin. :)
Google amcadan yararlanmistim ben ama sonra olay farkli noktalara kaydi. :)
Bu yolda dedigim gibi hersey mubah. :)
Bos zamanim da ugrastigim bir CTF oyununda da farkli bir yol izlemistim.Zip dosyasinin sifre kismininla ugrasmamistim. :) Kisaca zaman sorunun yoksa detayli incelemeye calisiyorum.
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

betseg


-DıLgEş-

Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

7hr33l3t73r

Basit mi? zor mu?.Bilmiyorum ama.Ugrasmak isteyenler icin paylasalim.(Dosya, yazinin sonun da)
Oneri=> Baslangic icin GDB/LLDB/radare gibi konsol tabanli debugger'lar ile inceleleme yapmanizi onermemekteyim.Konsol tabanli uygulamalara kendinizi ilerlettikce gecmeniz sizin yarariniza olacaktir.Benim onerim baslangic ASM bilginiz varsa, daha cok arayuzlu uygulamalar ile incelemeniz.
Nedir bunlar ↵.
1=> Hopper
Kendisinin linux surumu bulunmakta ve 30 dk gibi bir calistirma suresi bulunmakta.
30 dk yetmezse yeniden baslatarak bir 30 dk gibi sure tekrar elde edebilirsiniz. :)
2=> IDA
Linux icin demo surumu bulunmakta ama yazilimi analiz etmek icin yeterli.
Ben IDA goruntusu atayim.Merak edenler icin, hem de paylasilan crackme icin ipucu kodlari bulunsun.

3=> Bokken
Kendisi radare2'nin arayuz versiyonu.Bir de ragui diye vardi ama onu hic denemedim.
                         Baslangic analizler icin bunlar yeterlidir.Konsol tabanli yazilimlara, biraz pratik yaptiginiz zaman gecmenizi sizin icin daha iyi olacaktir.Ornegin Mac OS X sistemler de genel olarak tercih edilen LLDB yazilimi  kullanilmaktadir. GDB'ye bazi komutlari benzemektedir ama tam olarak degil.Ornegin ASM dokumune ulasmak icin GDB'de disas main ise LLDB'de bu komut ek olarak -n argumani almakta.(name = disas -n main).
Merak edenler icin bir LLDB goruntusu paylasalim.Zira kendinizi gelistirdikce, konsol tabanli uygulamalar da daha iyi analiz icin ekstra yazilimlardan faydalanmaya baslayacaksiniz.(Peda vs) 

                         Bu bilgilerden sonra gecelim analiz islemine.Oncelikle analiz edecegimiz yazilimi iyi tanimaliyiz.Hangi dil de,Kullanilan foksiyonlar, bilinen pack vs var mi?.                       
Simdi ufak bilgiler paylastiktan sonra gelelim tesvik primine. :)
indir
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

lynxcode

Konuya faydası yok ama amacına yönelik bir soru. Linux için decompiler biliyor musunuz?

Reverser

Bir önceki mesajda decompiler anlatımı var. :)

XFCE ROCKS !
Powered by Thunar & XFWM4



lynxcode

bunlar disassembler değil mi? benim dediğim exetoc tarzı, assembly e değil de ilkel bir c koduna dönüştürüyor. Birtane bulmuştum ama oda 64 bitte yoktu hata verip duruyordu. Zaten temelde bir farkları yok. Reversingten ve assemblyden şimdilik anlamıyorum. exetoc ninde c'ye çevirdiği exelerin değişkenleri felan asm tabanlı sanırım.

Reverser

IDA ve Hopper pseudo C kod üretebiliyorlar.

XFCE ROCKS !
Powered by Thunar & XFWM4



lynxcode

işime yarayabilir. ama şimdi biraz daha araştırma fırsatım oldu da Assembly şart sanırım.
Teşekkürler kolay gelsin. Mutlu reversingler

7hr33l3t73r

Crackme-java yazilimini da aradan cikartalim.Cozen olmayacak herhalde.Neyse diger yazlima gecmek isteyenler yazinin sonuna bakabilirler.
Yazilim hakkinda biraz bilgilenelim.

$ file crackme-java.zip ↵
crackme-java.zip: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped
$ ldd crackme-java.zip ↵
        not a dynamic executable

Bakalim strings ciktisi bize neler soyleyecek.

$ strings crackme-java.zip G java ↵
Xfjd6&ZN4java4C
o?rackme.java
$ strings crackme-java.zip G UPX ↵
cUPX!d
UPX!u
UPX!
UPX!

Simdi biraz kolayladik.

$ upx -d crackme-java.zip ↵
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2013
UPX 3.91        Markus Oberhumer, Laszlo Molnar & John Reiser   Sep
30th 2013

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
     15196 <-      7900   51.99%  linux/ElfAMD   crackme-java.zip

Unpacked 1 file.
$ ldd crackme-java.zip ↵
        linux-vdso.so.1 (0x00007ffd49deb000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f594e5c1000)
        libgcj.so.16 => /usr/lib/libgcj.so.16 (0x00007f594b48b000)
        libm.so.6 => /usr/lib/libm.so.6 (0x00007f594b18d000)
        libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f594af70000)
        librt.so.1 => /usr/lib/librt.so.1 (0x00007f594ad68000)
        libz.so.1 => /usr/lib/libz.so.1 (0x00007f594ab52000)
        libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f594a94e000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007f594a5aa000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f594e7d7000)

Sonrasini zaten paylasilan resim anlatmakta. =>crackme::crackme(void)<=  85(0x55) ile karsilastirilmakta.
ASM: ↓

mov edx, 0x55
cmp eax, edx

Gelelim bir diger programimiza.Programimiz da bir sifre soruluyor(Burasi zaten olmazsa olmazlarimiz).Dogru sifre girilince,
Kriptolu data dosyasi, programimizin calistigi dizine cikartiliyor ve asil islem de burada basliyor.(Kriptolu data dosyasini acmak).
Data dosyasini acmak icin Google amcamizdan yardim istemeye cekinmeyin. :)Biraz ileri seviye mi? diyeyim.Yoksa orta seviye mi?
bilemedim ama programimizi incelediginiz zaman zaten goreceksiniz.Sifreyi bilmesekte de DATA dosyasinin acildigini goreceksiniz
(En fazla 2sn surmekte).Bildigimiz uzere, AES 128-bit blok boyutu kullanirken, bizim DATA dosyasinin kullandigi 256-bit.
Aslinda burada belirtmek istedigim, guclu sifreler kullanmamiz gerektigidir.Programimiz da ki DATA cok basit bir yontem
ile korunmaktadir.Zaten herhangi bir sifre bilmemize gerekte yok ani (adi ustunde crackme:) ) Konuyu takip eden arkadaslarin,
cok rahatlikla cozeceklerini umuyorum.(Biraz daha yazarsam, direk cozumu aciklayacagim:) )
Cozum yontemlerinizi aciklamaktan lutfen cekinmeyin. Konuya geri donuslerim gec olabilir.Lutfen, simdiden kusuruma bakmayin.
Not => Son bir degisiklik yaptim.Iki dosyanin sifresi aynidir bilgilerinize.DATA dosyasi icin ugrasmaya bilirsiniz.Yazilimi cozmeniz
yeterlidir.DATA dosyasinla ugrasacak olan arkadaslar icin paylasilmistir bu bilgiler.
[indir]
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

mrgun

@Reverser
hocam tersine mühendisliğe başlangıç için önerileriniz nedir

7hr33l3t73r

Crakme32 yazilimin cozumu paylasayim ve yeni bir yazilim ekleyim. Cozen olmuyacak herhalde!

Yeni yazilim basit bir kod cevirisi
http://s8.dosya.tc/server2/3ynovx/cevir.zip.html
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

7hr33l3t73r

Cok mu? Zor  olmus..!
Ipucu: (if else)
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Reverser

merhaba, vps üzerinden gdb ile çözmeye çalıştım. Şunun gibi bir şey sanırım :)

#include <stdio.h>
#include <stdlib.h>

char msg[] = "Tebrikler!\n";
char error[] = "Hata!\n";
char greeting[] =
                   "/*\n"
                   "* ===================================\n"
                   "*  Filename: cevir.c\n"
                   "*   Created: 02/17/2016 07:21:41 AM\n"
                   "*  Revision: none\n"
                   "*  Compiler: gcc\n"
                   "* ===================================\n "
                   "*/\n" ;

int main(int argc, char *argv[]) //0x080480c2
{
int val0;
int val1;
 

    printf(greeting);
val0 = 65;
val1 = 90;

if (val0 != val1)
{
err();
}
else
{
printf(msg);
}
}

int err() //0x080480f4
{
printf(error);
return 0;
}

XFCE ROCKS !
Powered by Thunar & XFWM4



7hr33l3t73r

@reverser tebrikler.
Guzel bir calisma olmus. Kod bakımından cok uzun olmus sadece. Ben biraz farkli bir yol izledim ama calisma yapisini daha  basit olarak kodlasaydiniz yine kabul ederdim.
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Reverser

hocam basit bir cmp instruction'ı sadece :D
daha komplike bir şeyler bekliyorum sizden.  :P

XFCE ROCKS !
Powered by Thunar & XFWM4



7hr33l3t73r

Zorlarim sınırları diğerinde :)
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

7hr33l3t73r

Ugrasmak isteyenler icin kucuk ve guzel bir uygulama. (258bayt)
#################
# filename: RDF.c        #
# compiler: GNU/GCC #
#################
#         Ubuntu-TR         #

http://s2.dosya.tc/server/9wi5jy/rdf.bin.zip.html
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

7hr33l3t73r

#545
sözde kod paylaşıyorum.  Zor oldu sanirim. :(
Kaynak kod:
http://sprunge.us/YZRM

void main(int a1, char *filename)
{
  int v3;
  signed int v4;
  int v5;

  v3 = sys_open(filename, 0, 0x124u);
  if ( v3 >= 0 )
  {
    fd = v3;
    while ( 1 )
    {
      v4 = sys_read(fd, &unk_80491D0, 0xAu);
      if ( !v4 || v4 < 0 )
        break;
      v3 = sys_write(1, &unk_80491D0, v4);
      if ( v3 < 0 )
        goto BYE;
    }
    v3 = sys_close(fd);
  }
BYE:
  v5 = sys_exit(v3);
}

Yazılımı çalıştırmanız için komut.
echo "read me" > read.txt ; ./rdf.bin.zip read.txt
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

7hr33l3t73r

#546
Uzun bir aradan sonra python ile kolay dan zora dogru iki, uc tane yazilim yukleyelim. Ilgilenenler icin.
CrackMe :)
Edit: Siralama da hata yapmisim. 1,2,3,5 olanlar kolaydan orta dereceye gitmekte. Zor olan ise 4 .
Uygulamalarin hepsini.
$ python2 crackme*
Seklinde calistirabilirsiniz.

https://share.riseup.net/#b8_DfRxE-LY58ixBKP9g4w
Not: Cozum vidyosu cekilmis olup asagidaki adrestedir. Sifresi 1 hafta sonra paylasilacaktir. Zamanim olmaya bilir diye erkenden hazirladim.
http://s9.dosya.tc/server/um7245/crackmes.zip.html
sifre : 8f4fd3cfe119e6b6e3b5ec58b5dd060b
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

b4d

Alıntı yapılan: Reverser - 03 Kasım 2014 - 20:34:00
Arkadaşlar merhaba, bu konuyu benim gibi reverse code enginnering hakkında kendini geliştirmek isteyenler için açtım. Planım şu, C programlama bilen arkadaşlar bir program yazacaklar ve kaynak kodunu paylaşmadan sadece derlenmiş .exe formatlı binary dosyayı paylaşacaklar bizde bu executable dosyaları analiz edip, C kodu haline geri çevirip burada paylaşacağız programı yazan kişi de orijinal kodunu paylaşacak ve nasıl bir iş çıkardığımızı göreceğiz.

Şimdi C kodlama bilen birinden bir program yazıp burada paylaşmasını istiyorum umarım yardım etmek isteyen biri çıkar :)

Hocam mümkünse özel bir mesaj atabilir misiniz?

7hr33l3t73r

#548
Kotu arkadasimiz. :) bana Illuminati gibi gizli mesaj vermek istemis herhalde . :)
Neyse fazla paranoyaya baglamadan :) once ki yazilimlar iptal. :)
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

7hr33l3t73r

Geriye donuk baktigim zaman a10 adli yazilimin yarim kaldigini gordum.  Cozume ulastiralim.

a10 yazilim ile bilgiler.

---- ELF Structures ----
ELF Header
class=64-bit
encoding=Little Endian
fileversion=1
os=System V
abi=0
type=ET_EXEC
machine=x86_64
version=1
entryPoint=0x4004c0
phoffset=0x40
shoffset=0x1888
flags=0x0
ehsize=64
phentsize=38
phnum=8
shentsize=40
shnum=1e
shtrndx=1b
InitArray (1)
Entry addess=0x400590 name=frame_dummy
Interpreter (offset=0x200, size=28)
Value="/lib64/ld-linux-x86-64.so.2"
Note Segment (offset=0x21c, size=32)
Name="GNU"
Type=1
Type String="NT_GNU_ABI_TAG"
Description="OS Linux 2.6.32"
Note Segment (offset=0x23c, size=36)
Name="GNU"
Type=3
Type String="NT_GNU_BUILD_ID"
Description="aa2d742521eb1dfebc8306be0f3445dfd51b587"
Read Only Segment (offset=0x8b0, size=51, strings=2)
String="integer pl0x lel"
String="u found dat thing"
Comment Segment (offset=0xd68, size=17)
String="GCC: (GNU) 5.2.0"
String Table (offset=0x15a8, size=736, entries=48)
String=""
String="a"
String="a10.c"
String="completed.6938"
String="crtstuff.c"
String="init.c"
String="main"
String="this_is_last"
String="this_is_last_lel"
String="this_last_thing"
String="this_other_thing"
String="this_otter_thingy_thing"
String="this_thing"
String="this_thingy_thing"
String Table (offset=0x310, size=93, entries=9)
String="GLIBC_2.7"
String="__isoc99_scanf"
String="printf"
        String="puts"

C Kod:
Kod (a10.c) Seç

#include <stdio.h>

int this_is_last();
int a;

int this_is_last_lel()
{
  int result;
  while ( 1 )
  {
    result = a;
    if ( a <= 0 )
      break;
    --a;
    this_is_last();
  }
  return result;
}
int this_is_last()
{
  --a;
  return this_is_last_lel();
}
int this_thingy_thing()
{
  int result;

  result = (a - 10);
  a -= 10;
  return result;
}
int this_thing()
{
  a *= a;
  printf("%d", a);
  while ( a > 10 )
    this_thingy_thing();
  return printf("%d\n", a);
}
int this_other_thing()
{
  a = -a;
  a *= a;
  a = -a;
  printf("%d", a);
  a = -a;
  while ( a > 10 )
    this_thingy_thing();
  return printf("%d\n", a);
}
int this_last_thing()
{
  a = 0;
  printf("u found dat thing");
  printf(" w");
  printf("%d", a);
  return puts("w");
}
int this_otter_thingy_thing()
{
  int result;

  result = (a + 10);
  a += 10;
  return result;
}
int main()
{
  int result;
  puts("integer pl0x lel");
  scanf("%d", &a);
  if ( a <= 0 )
  {
    if ( a >= 0 )
      this_last_thing();
    else
      this_other_thing();
  }
  else
  {
    this_thing();
  }
  if ( a )
  {
    this_is_last_lel();
    result = a;
  }
  else
  {
    result = a;
  }
  return result;
}

ASM analiz:

a10:     file format elf64

int this_is_last_lel()
{
    55                    push   rbp
    48 89 e5              mov    rbp,rsp
    48 83 ec 10          sub    rsp,0x10
  int result;
  while ( 1 )
  {
    result = a;
    8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # e <this_is_last_lel+0xe>
    89 45 fc              mov    DWORD PTR [rbp-0x4],eax
    if ( a <= 0 )
  8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 17 <this_is_last_lel+0x17>
  85 c0                test   eax,eax
  7e 1b                jle    36 <this_is_last_lel+0x36>
      break;
    --a;
  8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 21 <this_is_last_lel+0x21>
  83 e8 01              sub    eax,0x1
  89 05 00 00 00 00    mov    DWORD PTR [rip+0x0],eax        # 2a <this_is_last_lel+0x2a>
    this_is_last();
  b8 00 00 00 00        mov    eax,0x0
  e8 00 00 00 00        call   34 <this_is_last_lel+0x34>
    result = a;
  eb d2                jmp    8 <this_is_last_lel+0x8>
      break;
  90                    nop
  }
  return result;
  8b 45 fc              mov    eax,DWORD PTR [rbp-0x4]
}
  c9                    leave 
  c3                    ret   

int this_is_last()
{
  55                    push   rbp
  48 89 e5              mov    rbp,rsp
  --a;
  8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 46 <this_is_last+0xa>
  83 e8 01              sub    eax,0x1
  89 05 00 00 00 00    mov    DWORD PTR [rip+0x0],eax        # 4f <this_is_last+0x13>
  return this_is_last_lel();
  b8 00 00 00 00        mov    eax,0x0
  e8 00 00 00 00        call   59 <this_is_last+0x1d>
}
  5d                    pop    rbp
  c3                    ret   

int this_thingy_thing()
{
  55                    push   rbp
  48 89 e5              mov    rbp,rsp
  int result;

  result = (a - 10);
  8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 65 <this_thingy_thing+0xa>
  83 e8 0a              sub    eax,0xa
  89 45 fc              mov    DWORD PTR [rbp-0x4],eax
  a -= 10;
  8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 71 <this_thingy_thing+0x16>
  83 e8 0a              sub    eax,0xa
  89 05 00 00 00 00    mov    DWORD PTR [rip+0x0],eax        # 7a <this_thingy_thing+0x1f>
  return result;
  8b 45 fc              mov    eax,DWORD PTR [rbp-0x4]
}
  5d                    pop    rbp
  c3                    ret   

int this_thing()
{
  55                    push   rbp
  48 89 e5              mov    rbp,rsp
  a *= a;
  8b 15 00 00 00 00    mov    edx,DWORD PTR [rip+0x0]        # 89 <this_thing+0xa>
  8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 8f <this_thing+0x10>
  0f af c2              imul   eax,edx
  89 05 00 00 00 00    mov    DWORD PTR [rip+0x0],eax        # 98 <this_thing+0x19>
  printf("%d", a);
  8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 9e <this_thing+0x1f>
  89 c6                mov    esi,eax
  bf 00 00 00 00        mov    edi,0x0
  b8 00 00 00 00        mov    eax,0x0
  e8 00 00 00 00        call   af <this_thing+0x30>
  while ( a > 10 )
  eb 0a                jmp    bb <this_thing+0x3c>
    this_thingy_thing();
  b8 00 00 00 00        mov    eax,0x0
  e8 00 00 00 00        call   bb <this_thing+0x3c>
  while ( a > 10 )
  8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # c1 <this_thing+0x42>
  83 f8 0a              cmp    eax,0xa
  7f eb                jg     b1 <this_thing+0x32>
  return printf("%d\n", a);
  8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # cc <this_thing+0x4d>
  89 c6                mov    esi,eax
  bf 00 00 00 00        mov    edi,0x0
  b8 00 00 00 00        mov    eax,0x0
  e8 00 00 00 00        call   dd <this_thing+0x5e>
}
  5d                    pop    rbp
  c3                    ret   

int this_other_thing()
{
  55                    push   rbp
  48 89 e5              mov    rbp,rsp
  a = -a;
  8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # e9 <this_other_thing+0xa>
  f7 d8                neg    eax
  89 05 00 00 00 00    mov    DWORD PTR [rip+0x0],eax        # f1 <this_other_thing+0x12>
  a *= a;
  8b 15 00 00 00 00    mov    edx,DWORD PTR [rip+0x0]        # f7 <this_other_thing+0x18>
  8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # fd <this_other_thing+0x1e>
  0f af c2              imul   eax,edx
89 05 00 00 00 00    mov    DWORD PTR [rip+0x0],eax        # 106 <this_other_thing+0x27>
  a = -a;
8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 10c <this_other_thing+0x2d>
f7 d8                neg    eax
89 05 00 00 00 00    mov    DWORD PTR [rip+0x0],eax        # 114 <this_other_thing+0x35>
  printf("%d", a);
8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 11a <this_other_thing+0x3b>
89 c6                mov    esi,eax
bf 00 00 00 00        mov    edi,0x0
b8 00 00 00 00        mov    eax,0x0
e8 00 00 00 00        call   12b <this_other_thing+0x4c>
  a = -a;
8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 131 <this_other_thing+0x52>
f7 d8                neg    eax
89 05 00 00 00 00    mov    DWORD PTR [rip+0x0],eax        # 139 <this_other_thing+0x5a>
  while ( a > 10 )
eb 0a                jmp    145 <this_other_thing+0x66>
    this_thingy_thing();
b8 00 00 00 00        mov    eax,0x0
e8 00 00 00 00        call   145 <this_other_thing+0x66>
  while ( a > 10 )
8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 14b <this_other_thing+0x6c>
83 f8 0a              cmp    eax,0xa
7f eb                jg     13b <this_other_thing+0x5c>
  return printf("%d\n", a);
8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 156 <this_other_thing+0x77>
89 c6                mov    esi,eax
bf 00 00 00 00        mov    edi,0x0
b8 00 00 00 00        mov    eax,0x0
e8 00 00 00 00        call   167 <this_other_thing+0x88>
}
5d                    pop    rbp
c3                    ret   

int this_last_thing()
{
55                    push   rbp
48 89 e5              mov    rbp,rsp
  a = 0;
c7 05 00 00 00 00 00 mov    DWORD PTR [rip+0x0],0x0        # 177 <this_last_thing+0xe>
00 00 00
  printf("u found dat thing");
bf 00 00 00 00        mov    edi,0x0
b8 00 00 00 00        mov    eax,0x0
e8 00 00 00 00        call   186 <this_last_thing+0x1d>
  printf(" w");
bf 00 00 00 00        mov    edi,0x0
b8 00 00 00 00        mov    eax,0x0
e8 00 00 00 00        call   195 <this_last_thing+0x2c>
  printf("%d", a);
8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 19b <this_last_thing+0x32>
89 c6                mov    esi,eax
bf 00 00 00 00        mov    edi,0x0
b8 00 00 00 00        mov    eax,0x0
e8 00 00 00 00        call   1ac <this_last_thing+0x43>
  return puts("w");
bf 00 00 00 00        mov    edi,0x0
e8 00 00 00 00        call   1b6 <this_last_thing+0x4d>
}
5d                    pop    rbp
c3                    ret   

int this_otter_thingy_thing()
{
55                    push   rbp
48 89 e5              mov    rbp,rsp
  int result;

  result = (a + 10);
8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 1c2 <this_otter_thingy_thing+0xa>
83 c0 0a              add    eax,0xa
89 45 fc              mov    DWORD PTR [rbp-0x4],eax
  a += 10;
8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 1ce <this_otter_thingy_thing+0x16>
83 c0 0a              add    eax,0xa
89 05 00 00 00 00    mov    DWORD PTR [rip+0x0],eax        # 1d7 <this_otter_thingy_thing+0x1f>
  return result;
8b 45 fc              mov    eax,DWORD PTR [rbp-0x4]
}
5d                    pop    rbp
c3                    ret   

int main()
{
55                    push   rbp
48 89 e5              mov    rbp,rsp
48 83 ec 10          sub    rsp,0x10
  int result;
  puts("integer pl0x lel");
bf 00 00 00 00        mov    edi,0x0
e8 00 00 00 00        call   1ee <main+0x12>
  scanf("%d", &a);
be 00 00 00 00        mov    esi,0x0
bf 00 00 00 00        mov    edi,0x0
b8 00 00 00 00        mov    eax,0x0
e8 00 00 00 00        call   202 <main+0x26>
  if ( a <= 0 )
8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 208 <main+0x2c>
85 c0                test   eax,eax
7f 22                jg     22e <main+0x52>
  {
    if ( a >= 0 )
8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 212 <main+0x36>
85 c0                test   eax,eax
78 0c                js     222 <main+0x46>
      this_last_thing();
b8 00 00 00 00        mov    eax,0x0
e8 00 00 00 00        call   220 <main+0x44>
eb 16                jmp    238 <main+0x5c>
    else
      this_other_thing();
b8 00 00 00 00        mov    eax,0x0
e8 00 00 00 00        call   22c <main+0x50>
eb 0a                jmp    238 <main+0x5c>
  }
  else
  {
    this_thing();
b8 00 00 00 00        mov    eax,0x0
e8 00 00 00 00        call   238 <main+0x5c>
  }
  if ( a )
8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 23e <main+0x62>
85 c0                test   eax,eax
74 15                je     257 <main+0x7b>
  {
    this_is_last_lel();
b8 00 00 00 00        mov    eax,0x0
e8 00 00 00 00        call   24c <main+0x70>
    result = a;
8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 252 <main+0x76>
89 45 fc              mov    DWORD PTR [rbp-0x4],eax
eb 09                jmp    260 <main+0x84>
  }
  else
  {
    result = a;
8b 05 00 00 00 00    mov    eax,DWORD PTR [rip+0x0]        # 25d <main+0x81>
89 45 fc              mov    DWORD PTR [rbp-0x4],eax
  }
  return result;
8b 45 fc              mov    eax,DWORD PTR [rbp-0x4]
}
c9                    leave 
c3                    ret   

dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html