Name:
Location: Winnipeg, Manitoba, Canada

The Wholefood Farmacy makes eating healthy easy, convenient and affordable. We offer pure, nutrient-dense, ready-to-eat, whole food meals, snacks, soups, smoothie mixes and treats for the children. All of our foods are vegetarian, most are raw and vegan as well. We also offer many gluten-free and nut-free whole food choices for those with food sensitivities - see our FAQ section of the Whole Food Farmacy Website for more information.

Sunday, January 28, 2024

inBINcible Writeup - Golang Binary Reversing

This file is an 32bits elf binary, compiled from go language (i guess ... coded by @nibble_ds ;)
The binary has some debugging symbols, which is very helpful to locate the functions and api calls.

GO source functions:
-  main.main
-  main.function.001

If the binary is executed with no params, it prints "Nope!", the bad guy message.

~/ncn$ ./inbincible 
Nope!

Decompiling the main.main function I saw two things:

1. The Argument validation: Only one 16 bytes long argument is needed, otherwise the execution is finished.

2. The key IF, the decision to dexor and print byte by byte the "Nope!" string OR dexor and print "Yeah!"


The incoming channel will determine the final message.


Dexor and print each byte of the "Nope!" message.


This IF, checks 16 times if the go channel reception value is 0x01, in this case the app show the "Yeah!" message.

Go channels are a kind of thread-safe queue, a channel_send is like a push, and channel_receive is like a pop.

If we fake this IF the 16 times, we got the "Yeah!" message:

(gdb) b *0x8049118
(gdb) commands
>set {char *}0xf7edeef3 = 0x01
>c
>end

(gdb) r 1234567890123456
tarting program: /home/sha0/ncn/inbincible 1234567890123456
...
Yeah!


Ok, but the problem is not in main.main, is main.function.001 who must sent the 0x01 via channel.
This function xors byte by byte the input "1234567890123456" with a byte array xor key, and is compared with another byte array.

=> 0x8049456:       xor    %ebp,%ecx
This xor,  encode the argument with a key byte by byte

The xor key can be dumped from memory but I prefer to use this macro:

(gdb) b *0x8049456
(gdb) commands
>i r  ecx
>c
>end
(gdb) c

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x12 18

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x45 69

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x33 51

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x87 135

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x65 101

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x12 18

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x45 69

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x33 51

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x87 135

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x65 101

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x12 18

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x45 69

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x33 51

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x87 135

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x65 101

Breakpoint 2, 0x08049456 in main.func ()
ecx            0x12 18

The result of the xor will compared with another array byte,  each byte matched, a 0x01 will be sent.

The cmp of the xored argument byte,
will determine if the channel send 0 or 1


(gdb) b *0x0804946a
(gdb) commands
>i r al
>c
>end

At this point we have the byte array used to xor the argument, and the byte array to be compared with, if we provide an input that xored with the first byte array gets the second byte array, the code will send 0x01 by the channel the 16 times.


Now web have:

xorKey=[0x12,0x45,0x33,0x87,0x65,0x12,0x45,0x33,0x87,0x65,0x12,0x45,0x33,0x87,0x65,0x12]

mustGive=[0x55,0x75,0x44,0xb6,0x0b,0x33,0x06,0x03,0xe9,0x02,0x60,0x71,0x47,0xb2,0x44,0x33]


Xor is reversible, then we can get the input needed to dexor to the expected values in order to send 0x1 bytes through the go channel.

>>> x=''
>>> for i in range(len(xorKey)):
...     x+= chr(xorKey[i] ^ mustGive[i])
... 
>>> print x

G0w1n!C0ngr4t5!!


And that's the key :) let's try it:

~/ncn$ ./inbincible 'G0w1n!C0ngr4t5!!'
Yeah!

Got it!! thanx @nibble_ds for this funny crackme, programmed in the great go language. I'm also a golang lover.


Related posts


  1. Hacking Tools For Windows
  2. Hacking Tools Pc
  3. Hacking Tools Pc
  4. Hacker Tools Mac
  5. Pentest Tools For Windows
  6. Underground Hacker Sites
  7. New Hack Tools
  8. Pentest Tools Free
  9. Hacker Tools Free Download
  10. Kik Hack Tools
  11. Hacker Tools Free
  12. Hacker Security Tools
  13. Hack Rom Tools
  14. Hacker Tools Free Download
  15. Hack Tools
  16. Hacker Tools Mac
  17. Hacking Tools Windows 10
  18. Github Hacking Tools
  19. Nsa Hack Tools
  20. Top Pentest Tools
  21. Hacker Tool Kit
  22. Hacking Tools Windows
  23. Pentest Box Tools Download
  24. Hacking Tools Name
  25. Best Hacking Tools 2020
  26. Pentest Tools Alternative
  27. Hacking Tools 2019
  28. Hacker Tools Apk Download
  29. Github Hacking Tools
  30. Best Hacking Tools 2020
  31. Android Hack Tools Github
  32. Hacking Tools Windows 10
  33. Hacker
  34. Hacks And Tools
  35. Hacker Tools For Pc
  36. Hackrf Tools
  37. Pentest Tools List
  38. Hacker Hardware Tools
  39. Pentest Tools Find Subdomains
  40. World No 1 Hacker Software
  41. Pentest Tools Github
  42. Hacker Tools Free Download
  43. Hacking Tools Pc
  44. Hacker Tools List
  45. Hacking Tools Download
  46. Hacking Tools And Software
  47. Nsa Hack Tools
  48. Hak5 Tools
  49. Beginner Hacker Tools
  50. Hacking Tools Free Download
  51. Hack And Tools
  52. Pentest Tools Alternative
  53. Hack And Tools
  54. Hacker Tools Mac
  55. Pentest Tools Windows
  56. Kik Hack Tools
  57. Hacking Apps
  58. Pentest Tools Website Vulnerability
  59. Hacking Tools Software
  60. Hack Tools
  61. Hack Tools For Windows
  62. Hak5 Tools
  63. Hack App
  64. Beginner Hacker Tools
  65. Hacker Techniques Tools And Incident Handling
  66. Physical Pentest Tools
  67. Hacker
  68. Hacking Tools Download
  69. Game Hacking
  70. Pentest Tools For Windows
  71. Computer Hacker
  72. Pentest Tools Online
  73. Hacker Tools
  74. Hack And Tools
  75. Ethical Hacker Tools
  76. New Hack Tools
  77. Hack Tools Download
  78. Pentest Tools For Ubuntu
  79. New Hack Tools

0 Comments:

Post a Comment

<< Home