You are here

Broken Synapse: writing a DSO decompiler

ivan's picture
I've been a huge fan of Frozen Synapse ever since it was released back in 2011. It's a strategy game which looks like chess, only players move their pieces at the same time and discover the outcome at the end of the turn.
I had thought about looking into the game's internals a few times these past years and I finally found some time to do it. Here's what I figured: like a poorly written piece of poker software, I thought it was likely that the game client received information about the position of enemy units that would give a tactical edge to anyone reading them. Not that I intended to cheat, but I wanted to know it someone could. This post retraces the steps I took to accomplish this.

The first thing I do is use Wireshark to look at the network traffic. A simple filter (ip.addr == 62.197.39.230, the game server IP being displayed in the settings) makes it possible to see all the data sent to and received by the server. The good news is, nothing is encrypted. The protocol looks like this:

textcom	prelogon
textcom	command		saltRec		29007	2
textcom	login		[user]		[password]	33
textcom	loggedIn	30787		[user]
textcom	command		setMyOS		windows.steam
writeFile		psychoff/activeGames.txt	121	gz	161
textcom	command		refreshPeopleOnline

I spend some time figuring out which algorithm is used to hash passwords. It turns out it's MD5(salt + MD5(password)), but the password's MD5 is converted to uppercase before being re-hashed.
After a few hours, I have a Python client which can connect to the game server, get information regarding ongoing or finished games, etc. Frozen Synapse leagues could probably use this script to automate result checking, etc. It can also retrieve the files describing elapsed turns. These are the files I think may contain information which is not displayed to the player; sadly they use an undocumented binary format:

0000h: 06 00 00 00 88 31 33 32 31 38 33 34 09 6D 75 6C  ....ˆ1321834.mul 
0010h: 74 69 74 75 72 6E 09 63 61 66 66 69 6E 61 74 6F  titurn.caffinato 
0020h: 72 09 32 09 34 09 30 09 4D 61 74 63 68 6D 61 64  r.2.4.0.Matchmad 
0030h: 65 09 30 09 31 09 30 09 53 6E 69 70 65 72 5A 77  e.0.1.0.SniperZw 
0040h: 6F 6C 66 09 30 09 2D 31 09 30 20 31 09 35 32 20  olf.0.-1.0 1.52  
0050h: 36 32 09 36 31 30 20 32 34 38 09 34 32 37 36 09  62.610 248.4276. 
0060h: 31 38 38 09 31 38 09 31 32 39 09 63 61 66 66 69  188.18.129.caffi 
0070h: 6E 61 74 6F 72 09 53 6E 69 70 65 72 5A 77 6F 6C  nator.SniperZwol 
0080h: 66 09 2D 34 30 2E 30 09 30 09 30 09 30 00 00 00  f.-40.0.0.0.0... 
0090h: 00 08 00 00 00 00 00 00 00 0D 0A 6D 61 63 68 69  ...........machi 
00A0h: 6E 65 47 75 6E 00 01 00 00 00 01 00 00 00 00 FF  neGun..........ÿ 
00B0h: FF FF FF 00 00 80 BF 03 00 00 00 00 00 00 00 00  ÿÿÿ..€¿......... 
00C0h: 00 00 00 40 AB 19 44 D0 44 CE 41 01 00 00 00 00  ...@«.DÐDÎA..... 
00D0h: 00 80 BF 00 00 00 00 01 00 00 00 2E 00 00 00 00  .€¿............. 
00E0h: 00 00 00 01 00 00 00 40 AB 19 44 D0 44 CE 41 5B  .......@«.DÐDÎA[ 
00F0h: 67 16 44 E2 23 6E 42 00 00 00 00 00 00 00 00 00  g.Dâ#nB......... 
0100h: 00 00 00 5B 67 16 44 E2 23 6E 42 01 00 00 00 00  ...[g.Dâ#nB..... 
0110h: 00 80 BF 00 00 00 00 02 00 00 00 39 00 00 00 69  .€¿........9...i 
0120h: CE 9F C2 9C DE 7B C0 00 39 00 00 00 37 DC 80 C2  ϜÞ{À.9...7܀ 
0130h: 34 AF 3D 42 00 00 00 00 00 0E 72 6F 63 6B 65 74  4¯=B......rocket 
0140h: 4C 61 75 6E 63 68 65 72 00 02 00 00 00 01 00 00  Launcher........ 
0150h: 00 00 FF FF FF FF 00 00 80 BF 05 00 00 00 00 00  ..ÿÿÿÿ..€¿...... 
0160h: 00 00 00 00 00 00 7E 5F 2D 44 DB 39 B7 43 01 00  ......~_-DÛ9·C.. 
0170h: 00 00 00 00 80 BF 00 00 00 00 03 00 00 00 2E 00  ....€¿.......... 
0180h: 00 00 00 00 00 00 27 00 00 00 4B 01 E7 43 FD C2  ......'...K.çCýÂ 
0190h: A0 43 05 00 00 00 01 00 00 00 7E 5F 2D 44 DB 39   C........~_-DÛ9 

People familiar with the game will recognize some elements here and there: game ID, player names, and also some unit names a bit further. It's fairly obvious that the file is split into two parts: a header which is composed of tab-separated text, followed by unintelligible data.
I start with the header: the first field (6) is likely a version number, and the next byte (0x88) seems to match the header's size. To figure out what the rest is, I get the information for a lot of games, draw a big table on a sheet of paper and make educated guesses. Again, a Python script is worth a thousand words. The following table describes the header's structure:

Field index Description
0 The identifier of the game.
2 Name of the opponent.
3 Which "side" of the map belongs to the player.
4 The current turn.
5 Whether the player has committed his turn.
6 Description of the game.
7 Whether we are currently in the bidding phase.
8 Whether the game is finished.
9 Whether we are spectating the game.
10 The name of the player who was "replaced" if we are spectating.
12 An estimation of who is favoured in the game based on the players' ELO and match history.
13 The win/loss record between the two players. The two numbers are separated by a space.
14 The overall win/loss record for the first player.
15 The overall win/loss record for the second player.
16 The rank of the first player on the leaderboard.
17 The rank of the second player on the leaderboard.
18 The level of the first player.
19 The level of the second player.
20 The name of the first player.
21 The name of the second player.
22 The score of the game.
23 Whether the game is using timed turns.
24 The duration of the turns in case they are timed.
25 Whether the opponent has committed his turn.

The second part of the file is way harder. Based on the strings in it (machineGun, rocketLauncher), we can assume that we're looking at information related to units. I stumble around for a long while, but ultimately fail to make significant progress. Even though I find out the unit's starting coordinates and owner ID, I never get how the rest, which I'm sure is waypoints, is structured.

First attempt

Time to dive into it: I run the game with a debugger and place a breakpoint on networking functions such as recv, hoping to find which function parses the received data. Sadly, I end up looping inside a huge switch-case. Frozen Synapse's Wikipedia page indicates that the game relies on an engine called Torque Game Engine which uses its own script language. I'm reversing the interpreter. A quick glance inside the game's folder reveals a lot of ".cs.dso" files which contain the bytecode generated by those scripts. In all likelihood, the processing I'm looking for takes place in there.

Second attempt

Reversing a VM is far from being easy, but I get a lucky break: Torque Engine 2D was open-sourced in 2013. After a lot of reading, I identify the following places of interest in the project:

To sum up briefly, the Torque Game Engine's VM doesn't have registers. It uses three stacks which are used to perform all its operations: one for the strings, one for the integers and one for the floats. For instance, to add two numbers, you would push them both on the float stack, then use the OP_ADD opcode to let the VM know that the two operands must be popped, and that the result should be pushed.

The DSO file structure isn't very intricate: the header contains a version number, tables of immediate values used in the script and instructions. Here is the detailed description, starting from offset 0:

Name Size of the field (bytes) Description
version 4 The version of the VM which generated the bytecode. It can only be run if there is an exact match (no backward-compatibility).
gst_size 4 The size of the global string table.
global_string_table gst_size The global string table. All the strings used in the script are located here, separated by null bytes. Strings are referenced via an offset inside this "table". For instance, if the opcode OP_LOADIMMED_STR is followed by N, then the string which should be used starts at offset 8+N and stops at the first null byte encountered.
fst_size 4 The size of the string table used by functions.
function_string_table fst_size The function string table. It works exactly like the previous one, except that it contains strings which are used in the scope of functions (i.e. if we are in a function and a string is referenced, then it should be retrieved in this table instead of the previous one). I'm not really sure why they went through the trouble of splitting them into two tables.
gft_size 4 The global float table.
global_float_table 8 * gft_size An array of floats used in the script. They are accessed through their 0-based offset (2 would designate the third float, etc.).
fft_size 4 Size of the float table used by functions.
function_float_table 8 * fft_size The function float table. Like the strings, floats used in functions are located in a separate table.
code_size 4 The size of the bytecode in opcodes.
linebreak_count 4 The number of breakpoints.
code ? The opcode stream which constitutes the script. Opcodes can either be encoded as a single byte (for values between 0 and 254), or as 0xFF followed by 4 bytes (for values greater than 254). They are referenced by their 0-based index in this stream : the opcode which is executed after a jump to location N is code[N].
linebreak_pairs 2 * 4 * linebreak_count Information relative to breakpoints. Based on the name, we can guess that they contain pairs of opcodes on which the VM should break and their associated line number, but I didn't spend too much time on those.
it_size 4 Number of entries in the IdentTable.
ident_table ? References to the strings are absent from the opcode stream (a value of 0 is left everywhere string offsets should be found), probably because of how the bytecode is generated. This table is used to "patch" the opcode stream to put the string offsets back in. Each entry has the following structure:
Name Size of the field (bytes) Description
real_offset 4 The correct offset to insert.
count 4 The number of places to patch.
locations 4 * count A list of offsets in the code stream where the null value must be replaced by real_offset.

This script can be used to parse a DSO file.

The nice thing is, just like Java's bytecode, the name of functions and variables is present in the file. This is why it's possible to recreate a source code very close to the original.

Writing a decompiler

Now that all the information contained in the DSO file has been retrieved, I can start working on a decompiler. To make things easier, I use the open-source Torque Engine to generate increasingly complex scripts and I put breakpoints in the VM to study the execution process. Every time I encounter a new opcode, I implement it in Python. I start by writing an emulator which helps me keep track of the VM's stacks.
I implement the arithmetic operations first (OP_ADD, OP_SUB, etc.). When the VM encounters one, it uses the two top values from the float stack as arguments. For instance, the following bytecode computes a sum:

OP_LOADIMMED_FLT [offset in the float table]
OP_LOADIMMED_FLT [offset in the float table]
OP_ADD

The two first opcodes load immediate values from the float table into the float stack, then OP_ADD pops them and pushes their sum. My decompiler does the exact same thing, except it saves the operation instead of the result (i.e. instead of pushing "5" on the float stack, I would push the string "2 + 3"). And the code reappears mechanically.
I handle comparisons (OP_CMPEQ, etc.) the same way, except that they use the integer stack.
The Torque VM doesn't optimize anything, which makes the process a lot easier.

Let's look at how values are assigned now:

OP_LOADIMMED_STR [offset in the string table]
OP_SETCURVAR [offset in the string table]
OP_SAVEVAR_STR

In this example, two strings are used: the first one is the assigned value (pushed on the string stack), and the second one is the name of the destination variable: this means that the emulator also has to keep track of the current variable. The last opcodes pops the string and affects it to the variable. It's trivial to figure out the original code here: just put an equals sign between the two strings.

You get the idea: I'm going to fast forward to the most difficult part. Control structures (if/then/else, for/while) and function declarations. In order to handle those, I have to stop matching the original VM's behaviour.
The reason is, after an "if" statement, the VM can keep executing opcodes normally, whereas I have to close the bracket. Or when the OP_RETURN is encountered, the VM knows it has to leave the function, but as far as I'm concerned there may be other exit points so I can't use these opcodes to figure out whether the function stops here or not.
My solution was to create additional opcodes, such as META_ENDFUNC ou META_ENDWHILE to "remember" where structures end. The problem when you insert opcodes into the stream is that any absolute jumps get desynchronized. I made the assumption that the code never jumps out of a control structure, and it seems to hold so far. Since my opcodes are only inserted at the end of control structures, and since jumps don't go further than that, no desynchronization occurs as long as I remember to remove the opcodes I inserted when I reach them. Had the language possessed a goto keyword, this assumption would have been false.
The other problem is to reliably identify what kind of structure we're facing when an conditional jump is encountered. In order to figure this out, we can look at the opcode which is located just before the jump's destination. I ended up with the following table:

Opcode before the jump destination Control structure
OP_JMP The bytecode looks like this:
    [test which pushes its result on the stack]
*   OP_JMPIFNOT
|   ["True" branch, executed if the test succeeds]
|   OP_JMP            -------------------------------,
`-> ["False" branch]                                 |
    [opcodes which follow the control structure]  <--'

This is an if-then-else structure.

OP_JMP This is very similar to the previous one: if the opcode before OP_JMP is OP_LOAD*, this may be a the ternary operator being used (a ? b : c). The only way to know is to emulate the code of the branch and look at the stacks afterwards.
OP_JMPIFNOT or OP_JMPIFFNOT A for or while loop:
      [test to check if we should get out of the loop]
*     OP_JMPIFNOT
| ,-> [loop instructions]
| |   [test to check if we should get out of the loop]
| *   OP_JMPIFNOT
`---> [opcodes which follow the control structure]
Anything else This is a simple if with no else:
    [test]
*   OP_JMPIFNOT
|   ["True" branch, executed if the test succeeds]
`-> [opcodes which follow the control structure]

I have hidden other issues that I faced, but the important thing is that I managed to write a decompiler which regenerates a source code very close to the original. Interested readers can look at this script to learn more.
The code is neither clean nor elegant, but it works.

Decompiling Frozen Synapse

Now that I can decompile .cs.dso files, I can read the game's scripts to find out all I want to know. Victory! Or so I thought. My decompiler fails miserably and I understand why: Frozen Synapse's DSO files were generated circa 2011, a few game engine versions ago. The old bytecode is not compatible with the latest VM.

But it can't have changed that much, can it? I brace myself and open Frozen Synapse with IDA Pro. Tip: I choose to reverse the Linux version of the game, hoping that the developers have forgotten to strip the game's symbols and I'm rewarded for it. Thanks to this, I don't get lost in the compiled game engine and I can focus on finding the differences with the 2013 Torque Game Engine. Two major differences turn up:

  • The opcode list has been shifted in two places because of two new opcodes.
  • Offsets in the string table are encoded on 4 bytes in the old version, whereas they are encoded on 8 bytes in the new one. Comments in the VM code indicate that this may be related to a 64 bits version of the engine.

So I fix my decompiler to make it support both versions of the bytecode - a lot of pain summed up in a single sentence.

In the end, I manage to recreate Frozen Synapse's source code. Better: the code is so close to the original that it compiles back to DSO files, and I can use it instead of the compiled scripts! (The Torque VM recompiles scripts on the fly when a more recent version is found in the game folder.)

Modding the game

Apart from looking at how the game works, I can now modify Frozen Synapse in a very clean manner. All I have to do is open any script with the notepad, edit the code, and voila! The first thing I do is grant myself an achievement which is impossible to obtain today, since it involves beating a player who isn't active any more.

But remember, the goal was to discover the position of enemy units. Instead of setting up a proxy, parsing turn files, etc., why not simply disable the fog of war in the game's client? Easy as pie: here is an excerpt from psychoff/gameScripts/mtInGame.cs 2.0:

function loadMTStage4()
{
    if ($manager.visMode != 0.0)
    {
        error("****** Forcing \"Light\" visibility...");
        $manager.visMode = 0;
    	$gmPrefix = "\"Light\" ";
    	MatchInfoVisGraphic.setBitmap("common/gui/images/15black");
    }
    else
    {
        $gmPrefix = "Light";
        MatchInfoVisGraphic.setBitmap("common/gui/images/15white");
    }
   // ...
}

Witness the result in all its glory:

Conclusion

I realize that publishing this article will cast some suspicions on my last Frozen Synapse wins. I hope people will believe me when I say that I worked on this for the intellectual challenge and that I only used that mod once or twice online to verify that it worked.
My conclusion is that when designing a client-server architecture, any information which should never be displayed to the user must simply not be sent to him.
As I write this, Frozen Synapse 2 has just been announced and I'm very curious to find out whether Mode7 Games will use Torque Game Engine again, and whether I will be able to re-use my decompiler!

Comments

Hello, I need a help to hack some password stuffs. I wonder if you know anyone legit that's not out to scam.

his email hackatmcard10@yahoo.com or his whats-app number +2349037605155

IN THIS LIFE SOMEONE HAS TO TAKE THE RISK ON SOMETHING ,I AM Garcia hunfrey from New York City, Am here to share an Amazing testimony about how Dr ODOGUN just recently helped me in Getting my wife back to me that was something that i couldn't imagine will be so easy I've known Sophia for years, When we finally got married,things were so weird so we broke up in February 2011.In June 2012, she and I recently got back together and we were together until march 2013 when she started with some strange behavior later on she wasn't sleeping home. so one day she went out and did not return and ever since she left i haven't set eyes on her ever again and she couldn't give birth ever since i got married to her. During that time my mind was completely at a state of unrest, I wasn't eating, neither was i sleeping,because i love her so much that am willing to do anything to make her happy and be with her forever undermining our situation, I cried,I was so depressed and stressed out and was almost frustrated and was even planning to end it all. so one day i came across an aid were Victoria pope was shearing her testimony how a great spell caster that is above trust called Dr ODOGUN helped him and i love and care about her deeply that i just want her to come back because heavens knows how much i love her so i contacted him reluctantly. I never used to believe in spell casting but i gave it a try and it was a positive result. Today we are happily married and blessed by his Amazing powers with two wonderful kids. To you all out there no matter what you are facing similar to this this or not but just have this in mind that there is nothing imponderable that Dr odgun can not be made possible why because his Gifted. Once again thanks to Dr odogun . you can contact Dr. via his email address odogunspellhome@gmail.com or his whats app number +2349037605155

IN THIS LIFE SOMEONE HAS TO TAKE THE RISK ON SOMETHING ,I AM Garcia hunfrey from New York City, Am here to share an Amazing testimony about how Dr ODOGUN just recently helped me in Getting my wife back to me that was something that i couldn't imagine will be so easy I've known Sophia for years, When we finally got married,things were so weird so we broke up in February 2011.In June 2012, she and I recently got back together and we were together until march 2013 when she started with some strange behavior later on she wasn't sleeping home. so one day she went out and did not return and ever since she left i haven't set eyes on her ever again and she couldn't give birth ever since i got married to her. During that time my mind was completely at a state of unrest, I wasn't eating, neither was i sleeping,because i love her so much that am willing to do anything to make her happy and be with her forever undermining our situation, I cried,I was so depressed and stressed out and was almost frustrated and was even planning to end it all. so one day i came across an aid were Victoria pope was shearing her testimony how a great spell caster that is above trust called Dr ODOGUN helped him and i love and care about her deeply that i just want her to come back because heavens knows how much i love her so i contacted him reluctantly. I never used to believe in spell casting but i gave it a try and it was a positive result. Today we are happily married and blessed by his Amazing powers with two wonderful kids. To you all out there no matter what you are facing similar to this this or not but just have this in mind that there is nothing imponderable that Dr odgun can not be made possible why because his Gifted. Once again thanks to Dr odogun . you can contact Dr. via his email address odogunspellhome@gmail.com or his whats app number +2349037605155

The superb work done by dr. wakina that brought back my husband encouraged me to wright this testimony, to motivate anybody out there fighting to sustain his or her relationship that there is still hope and ways to get back your lover because letting go will never heal a wounded heart, but finding the total cure does. I am happy woman today because of the right decisions and steps I took to fight for the man I wants to spend my entire life with and also the father of my child.
I had hope when I came across information and testimonies online by people writing on how their partner returned to them after a love spell from dr. wakina via his email dr.wakinalovetemple@gmail.com.
Before the love spell, I keep wondering how my husband moved from being a loving and caring father to a vile and nasty person overnight without reasons, unlike him. I searched myself to the ground and did not see the wrong I have done that made him pick up a bag of his cloths to his friends basement just five days to our eleventh anniversary without saying a word. I love him with every breath in me and I can do anything to make him love me gain. The testimonies and information I got about dr. wakina became my only hope after several failed attempt to get him back after he was gone for two weeks.

Hi Friends Dr Trust is the best spell caster to help fix your relationship problem
Read my testimony and contact him now: Ultimatespellcast@gmail.com

My name is tucker Stacey. This is a very joyful day of my life because of the help Dr.Trust has rendered to me by helping me get my ex husband back with his magic and love spell. i was married for 6 years and it was so terrible because my husband was really cheating on me and was seeking for a divorce but when i came across Dr.Trust email on the internet on how he help so many people to get thier ex back and help fixing relationship.and make people to be happy in their relationship. i explained my situation to him and then seek his help but to my greatest surprise he told me that he will help me with my case and here i am now celebrating because my Husband has change totally for good. He always want to be by me and can not do anything without my present. i am really enjoying my marriage, what a great celebration. i will keep on testifying on the internet because Dr.Trust is truly a real spell caster. DO YOU NEED HELP THEN CONTACT DOCTOR TRUST NOW VIA EMAIL:

Ultimatespellcast@gmail.com or call +2348156885231 or Ultimatespellcast@yahoo.com. He is the only answer to your problem and make you feel happy in your relationship.

Hi Friends Dr Trust is the best spell caster to help fix your relationship problem
Read my testimony and contact him now: Ultimatespellcast@gmail.com

My name is tucker Stacey. This is a very joyful day of my life because of the help Dr.Trust has rendered to me by helping me get my ex husband back with his magic and love spell. i was married for 6 years and it was so terrible because my husband was really cheating on me and was seeking for a divorce but when i came across Dr.Trust email on the internet on how he help so many people to get thier ex back and help fixing relationship.and make people to be happy in their relationship. i explained my situation to him and then seek his help but to my greatest surprise he told me that he will help me with my case and here i am now celebrating because my Husband has change totally for good. He always want to be by me and can not do anything without my present. i am really enjoying my marriage, what a great celebration. i will keep on testifying on the internet because Dr.Trust is truly a real spell caster. DO YOU NEED HELP THEN CONTACT DOCTOR TRUST NOW VIA EMAIL:

Ultimatespellcast@gmail.com or call +2348156885231 or Ultimatespellcast@yahoo.com. He is the only answer to your problem and make you feel happy in your relationship.

GET YOUR EX LOVER BACK WITH THE HELP OF A POWERFUL SPELL CASTER CALLED (DR. BEN) email him on benherbaltemple@gmail.com

What a miracle to have my ex back,my name is Cherry Lugard
and i need to share this great testimony... I just want to say thanks(DR. BEN) for taking time to help me cast the spell that brings back my ex lover {now my husband},who suddenly lost interest in me after six month of engagement,but today we are married and we are more happier than never before, I am really short of words and joyful, and i don't know how much to convey my appreciation to you doctor BEN you are a God sent to restore broken relationship.he deeply enjoy helping people achieve their desires, find true love,getting their ex lovers back,stop abusive relationships,find success,attract happiness,find soul mates and more,contact him today. and let him show you the wonders and amazement of his Love Spell System. He deliver results at his best in real spell casting, email him for help on benherbaltemple@gmail.com Via website: http://benherbaltemple.webs.com/ you can also call him on +1(310)-220-0075.

Hello my name is Lauren i'm from USA i want to testify of a great and powerful spell caster my husband left me and the kids for 2 weeks when i called him he didn't pick up when he came back home the 3rd week he told me he wanted a divorce i was so sad i cried all night he left again i was so lonely the next day i was searching for something online when i found a spell caster called Priest Ade who have helped so many people with their problems so i contacted him with my problems he told me it will take 24hrs and my husband will be back to me i did every thing he told me to do and the next day my husband came back kneeling and begging he canceled the divorce we are now happy together Priest Ade can help you too Email him at ancientspiritspellcast@yahoo.com or ancientspiritspellcast@gmail.com website at https://ancientspiritspell7.wixsite.com/ancientspiritspell

TESTIMONY OF HOW I GOT CURED FROM (HERPES SIMPLEX VIRUS) BY THE GREAT
HEALER DOCTOR HOPE.
Hello everyone my name is Julia farbio I am here to testify of the
great work Dr Hope did in my life with the help of his herbal
traditional medicine. I have been suffering from Herpes since 2015 and
ever since then I have been looking for solutions on how to cure it. I
have being to different hospitals but I discovered none of them was
working out for me that I was just wasting money. So I decided to live
everything to God, then I was taking my medications to sustain my life
and reduce the pains. So on this particular Sunday morning after
coming back from service I sat down and begin to ask myself questions,
then my phone rang behold it was my sister calling which I answered
the call and she started telling me that a friend of hers who has been
suffering from same herpes has just been cured by Dr Hope the herbal
medicine man. Then I was over whelmed, even though I was a little bit
confused so she encourage me to also give Dr Hope a trial and see for
myself then I told her to help me get his contact and forward them to
me, So immediately she got the contact of Dr Hope and send them to me,
immediately I contacted Dr Hope and he told me everything I needed to
do to enable me get the herbs for my medications and immediately i did
that which he instructed me to do without wasting anytime. And here I
am today sound and healthy without any symptoms of herpes or any
sickness in my body system. And he also told me that there is no
sickness on this planet earth that doesn’t have a cure that with the
help of herbs he can cure any sickness or disease you can ever think
off. So if you are suffering from HERPES or any other sickness or
disease and you need a cure you can also contact Dr Hope with this
Email Address at drhopeherbalhome@gmail.com or whatsapp or call
him:+2348131652960 so you can also receive your healing and share your
testimony.

Greetings to you all, i am here today on this forum giving a life testimony on how Dr Okeyto has cured me from HIV Virus, i have been stocked in bondage with this virus for almost 5years now, i have tried different means to get this sickness out of my body i also heard there was no cure to the virus, all the possible ways i tried did not work out for me,i was using ARV hoping that i was going to be cure but my CD4 count was going down and down i do have the faith that i was going to be cured one day, and i was a strong believer in God and also in miracles, One day as i was on the internet i came across some amazing testimonies concerning how Dr Okeyto has cured different people from various sickness with his Herbal Herbs Medicine, they all advised we contact Dr Okeyto for any problem, with that i had the courage and i contacted Dr Okeyto i told him about my Sickness, He told me not to worry that he was going to prepare some Herbal Herbs Medicine for me, after some time in communication with Dr Okeyto, he finally prepared for me some herbs which he sent to me and he also gave me prescriptions on how to take them, My good friends after taking Dr Okeyto Herbs for some weeks i started to experience changes in me and from there, I noticed my Herpes Virus was no longer in my body, as i have also gone for test, Today i am fit and healthy to live life again, I am so happy for the good work of Dr Okeyto in my life, Friends if you are having any type of disease problem kindly email Dr Okeyto on {dr.okeytoherbalcure@gmail.com} or relate with him on his phone call him on +2349050141440/whats-app him ,,him is a great herbalist that treats and cure all manner of diseases Contact him thanks for your audience and i hope you find help like i did for what he has done for me, i am posting to this forum saying if you are into similar problem or have any kind of disease problem you can contact him......Thanks DR.OKEYTO for giving me back the life that i thought i have lost.....God Bless you Sir

I Met a Powerful Spell caster and Psychic from Africa by name Dr Believe, He is Real, Honest and Genuine.. He helped me get my lover back, there is no bad or negative effect.The Psychic uses white Magic and he helped me get my Lover back, it worked in 2 days.. My lover came back to me, apologized for leaving and now we are back together and as happy as ever… I will encourage and recommend anyone to contact the spell caster and ask him for help.. He does all kinds of spells asides love spells. just tell him your situation and he will help you… you can email him directly on Authenticspellcast@gmail.com or Authenticspellcast@hotmail.com or check him directly on his website at http://authenticspellcast8.wix.com/authenticspellcast or call +2348113868297 he is the answer to your problem..

Hello my names erin mary, am from USA and letting them know the secret of my happiness, the secret of my happiness is through doctor ABAKA the great spell caster, who help me to bring back my husband to me my husband left me because i could not give him a child but today Dr ABAKA stop my miscarriage and made me a mother after been passing through pains....., but Dr ABAKA put an end to this situation, now am a mother and am living happily with my husband and my new baby which i love so much, am using this medium to thank Dr ABAKA for the great work he did for me with his spell casting and his herbs, Thanks be unto him for helping me, my sisters out there i want you to thank Dr ABAKA for the great work he did for me and my husband, ....if you need his help also you can contact him through his email via;drabakaspelltemple@gmail.com or call +2349063230051.

Thanks to Dr BUDE for not letting me to be my relationship a disaster. i am Emilia Leon. i have been married since 3years and since then. we have both lived happily with our 2kids and it was a bless union until 3month ago i had misunderstandanding and it was little but since that day my husband totally changed. and he started coming home late from work. and i happened like that for about 2month and a half and i was very lonely and needd him to be the loving man i married. i met with some spell caster to help me but they did all they could do but nothing worked out. not until i saw a comment one evening on facebook on how he has restored broken home and now living happily. i contact him directly, and told him my problems he said i show relax that my husband will come back home and be the loving husband that he is like before. and that was it. he cast love spell and in 24hours my husband started calling me even from the office and bringing flowers home to me. all the appreciate to the powerful Dr BUDE. CONTACT HIM NOW AND HAVE YOUR BROKEN HOME BACK TO FEET. ON HIS EMAIL VIA;
budespelltemple@gmail.com or budespelltemple@hotmail.com website:https://budespelltemple.wixsite.com/drbude WHATAPP;+2348138666235

May God bless your good work sir. saving millions of lives daily. i am very much grateful to you sir. friends for the past 20years I've been a carrier of Genital Warts. i have visited many traditional center and others temples all to get my self a cure. but all my time was worthless. i was checking a blog and i saw a comment on Dr Akuna strong herbal medicine and how he has cured numerous of persons. i visited his website and also saw testimonies of him too. i was convinced that he must be my healer and i contacted him and he gave me directives on using his herbal medicine and how he will prepare it for me. i abide and obeyed and after 4days later i received his herbal medicine. and after using it for 2weeks i went to the clinic and test again and i was found negative. friends i can't testify how happy i am today being cured from Genital warts. he has remedies for all kinds of disease. Contact and your cure from great Akuna. his email:drakunasolutiontemple@gmail.com or his What app:+2348154625070 visit websites:http://drakunasolutiontem.wixsite.com/dr-akuna

My names are Taisia Joan am from USA i want to use this opportunity to thank my great doctor who really made my life a pleasurable one today. This great Doctor brought my husband back to me, i had 3 lovely kids for my husband, about 3 years ago i and my husband has been into one quarrel or the other until he finally left me for one lady. i felt my life was over and my kids thought then will never see their father again. i tried to be strong just for the kids but i couldn’t control the pains that torments my heart, my heart was filled with sorrows and pains because i was really in love with my husband. Every day and night i think of him and i always wish he will come back to me, until one day i met a good friend of mine that was also in a situation like me but her problem was her ex-boyfriend who she had an unwanted pregnancy for and he refused to take responsibility and dumped her. she told me that mine was a small case and that i shouldn’t worry about it at all so i asked her what was the solution to my problems and she gave me this great man phone number and his email address. i was doubting if this man was the solution, so i contacted this great man and he told me what to do and i deed them all, he told me to wait for just seven days and that my husband will come crawling on his kneels just for forgiveness so i faithfully deed what this great man asked me to do and for sure after four days i heard a knock on the door, in a great surprise i saw him on his kneels and i was speechless, when he saw me, all he did was crying and asking me for forgiveness, from that day, all the pains and sorrows in my heart flew away,since then i and my husband and our lovely kids are happy.that is why i want to say a big thanks to Dr iayaryi. This great man made me to understand that there is know problem on earth that has no solution so please if you know that you have this same problem or any problem that is similar, i will advise you to come straight to this great man. you can email him at (driayaryi2012@hotmail.com) And also Reach him on WhatsApp Number: +2349057915709 Thanks Dr. Iyaryi

I was diagnosed of hepatitis in 2011, I have tried all possible means to get cure but all my effort proved abortive, until a friend of mine introduced me to a herbal doctor from Africa, who prepare herbal medicine to cure all kind of diseases including hepatitis b virus (HBV), when i contacted this herbal doctor via his email, he sent me hepatitis b herbal medicine via courier service, when i received the herbal medicine he gave me step by step instructions on how to apply it, when i applied it as instructed i was totally cured from the virus within 8 days of usage. Contact this great herbal doctor via his email odukuherbalremedies@gmail.com or WhatsApp +2349064430408

Add new comment

(If you're a human, don't change the following field)
Your first name.
(If you're a human, don't change the following field)
Your first name.
(If you're a human, don't change the following field)
Your first name.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
To prevent automated spam submissions leave this field empty.
CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
4 + 3 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.