summaryrefslogtreecommitdiff
path: root/md/writeup/scan_memory_for_variable.md
diff options
context:
space:
mode:
Diffstat (limited to 'md/writeup/scan_memory_for_variable.md')
-rw-r--r--md/writeup/scan_memory_for_variable.md144
1 files changed, 144 insertions, 0 deletions
diff --git a/md/writeup/scan_memory_for_variable.md b/md/writeup/scan_memory_for_variable.md
new file mode 100644
index 0000000..c3903db
--- /dev/null
+++ b/md/writeup/scan_memory_for_variable.md
@@ -0,0 +1,144 @@
+title:Scan memory for variable
+keywords:memory,scan,variable
+
+# Scan memory for variable
+
+Someday ago I was playing one game. And as I not so often playing
+games. I would like to change some variables in memory like ammo quantity
+or health. May be it is not very interesting to play game with "cheating"
+but there is much more interest to play with program.
+
+
+In such play can help scanmem
+
+
+Here is example of program that will help us to learn how to use scanmem:
+
+```c
+#include <stdio.h>
+#include <stdlib.h>
+
+unsigned int secret_dw = 1000; //variable to search
+unsigned int tmp;//for input variable
+
+
+int main()
+{
+ int i;
+ while ( secret_dw != -1 )
+ {
+ scanf("%u",&tmp);
+ printf("secret_dw was %u \n",secret_dw);
+ secret_dw = tmp;
+ tmp = 0; // This is to prevent from detecting tmp variable position
+ }
+ printf("\bExit\n");
+ return 0;
+}
+```
+
+here only two variables one secret_dw for value that we will search
+and second one tmp to save input. Also tmp will zeroed if not then we will
+find tmp and secret_dw.
+
+compile example with
+
+``
+make
+``
+
+and run
+
+```
+./example
+```
+
+And in parallel run
+```
+$ scanmem `pidof example`
+scanmem version 0.11
+Copyright (C) 2009,2010 Tavis Ormandy, Eli Dupree, WANG Lu
+Copyright (C) 2006-2009 Tavis Ormandy
+scanmem comes with ABSOLUTELY NO WARRANTY; for details type `show warranty'.
+This is free software, and you are welcome to redistribute it
+under certain conditions; type `show copying' for details.
+
+info: maps file located at /proc/1801/maps opened.
+info: 5 suitable regions found.
+Please enter current value, or "help" for other commands.
+
+As we searching 4 byte value of uint we defining it by setting up option
+0> option scan_data_type int32
+```
+
+Now we ready to start our game. At beginning we know our secret_dw value it is 1000 but we will not use it.
+Type 1 in example
+
+```
+secret_dw was 1000
+```
+
+in scanmem
+```
+0> 1
+info: 01/05 searching 0x8049000 - 0x804a000...........ok
+info: 02/05 searching 0xb763d000 - 0xb763e000...........ok
+info: 03/05 searching 0xb7787000 - 0xb778a000...........ok
+info: 04/05 searching 0xb77a7000 - 0xb77a9000...........ok
+info: 05/05 searching 0xbf9d4000 - 0xbf9f5000...........ok
+info: we currently have 58 matches.
+```
+
+As we can see 58 matches. WooHoo. Now type '1000'in example
+1000
+
+secret_dw was 1
+
+in scanmem
+
+```
+58> 1000
+..........info: we currently have 2 matches.
+```
+
+only 2 now
+
+scanmem has also many built in commands you can see them when type help.
+One of them is 'list'. Use it.
+```
+2> list
+[ 0] 0x8049680, 1000, [I32 ]
+[ 1] 0xbf9f2dd8, 1000, [I32 ]
+```
+
+Here is list of matched variables. Number,address,value,size. By address we see that
+our variable is with number 0.
+
+```
+2> set 0=999
+info: setting *0x8049680 to 0x3e7...
+2> list
+[ 0] 0x8049680, 1000, [I32 ]
+[ 1] 0xbf9f2dd8, 1000, [I32 ]
+```
+
+Now our variable is with value 999. When you type list it may be little
+bit confusing that values is the same. Go in example
+12
+
+secret_dw was 999
+
+Yes. We have changed our variable. Our goal is completed.
+
+Scanmem webpage scanmem[1]
+
+Source contains programm outputs and example code.
+
+
+
+## Links
+http://taviso.decsystem.org/scanmem.html
+
+## Downloads
+scan_memory.tar.gz -
+2KiB - http://archive.main.lv/files/writeup/scan_memory_for_variable/scan_memory.tar.gz \ No newline at end of file