source: 2018/26/PyryS/HackSim/HackSim/HackSim/HackSim/HackSim.cs @ 9790

Revision 9790, 8.0 KB checked in by pymasalm, 2 years ago (diff)
Line 
1using System;
2using System.Text;
3using System.Collections.Generic;
4using Jypeli;
5using Jypeli.Assets;
6using Jypeli.Controls;
7using Jypeli.Effects;
8using Jypeli.Widgets;
9
10public class HackSim : Game
11{
12    int MARGINS = 20;
13    Font SOURCECODE_FONT;
14    InputBox cmd_line;
15    Widget cmd_cursor;
16    List<Device> netmap_list;
17    String usr_name;
18    Image device_icon = LoadImage("SysIcon");
19    Image device_icon_hover = LoadImage("SysIconHover");
20    Widget netmap;
21    Device current_device;
22
23
24    protected override void Update(Time time)
25    {
26        cmd_cursor.Position = cmd_line.Cursor.Position;
27        /*checkHover();*/
28        base.Update(time);
29    }
30    public override void Begin()
31    {
32        netmap_list = new List<Device>();
33        netmap_list.Add(new Device(device_icon, "TestBox", "tb", "1234", false));
34
35        SOURCECODE_FONT = LoadFont("SourceCode");
36
37        usr_name = "Guest";
38        StringList cmd_list = new StringList();
39        // Create command line input box
40        cmd_line = new InputBox();
41        cmd_line.Font = SOURCECODE_FONT;
42        cmd_line.Color = Color.Black;
43        cmd_line.TextColor = Color.LimeGreen;
44        cmd_line.BorderColor = Color.LimeGreen;
45        cmd_line.Cursor.IsVisible = false;
46        cmd_cursor = new Widget(cmd_line.Cursor.Width, cmd_line.Cursor.Height);
47        cmd_cursor.Color = Color.LimeGreen;
48        Timer t = new Timer();
49        t.Interval = 0.5;
50        t.Timeout += () => cmd_cursor.IsVisible = !cmd_cursor.IsVisible;
51        t.Start();
52        cmd_line.Width = Window.Width / 2 - MARGINS * 2;
53        cmd_line.X = Window.Width / 2 - cmd_line.Width / 2 - MARGINS;
54        cmd_line.Y -= Window.Height / 2 - cmd_line.Height / 2 - MARGINS;
55        Add(cmd_line);
56        cmd_line.Add(cmd_cursor);
57
58
59        // Create command line output box
60        Label cmd_out = new Label();
61        cmd_out.Font = SOURCECODE_FONT;
62        cmd_out.BorderColor = Color.LimeGreen;
63        cmd_out.TextColor = Color.LimeGreen;
64        cmd_out.Color = Color.Black;
65        cmd_out.Width = cmd_line.Width;
66        cmd_out.Height = Window.Height - cmd_line.Height - MARGINS * 3;
67        cmd_out.X = cmd_line.X;
68        cmd_out.Y = Window.Height / 2 - cmd_out.Height / 2 - cmd_line.Height + MARGINS / 2;
69        cmd_out.SizeMode = TextSizeMode.None;
70        cmd_out.HorizontalAlignment = HorizontalAlignment.Left;
71        cmd_out.VerticalAlignment = VerticalAlignment.Top;
72        Add(cmd_out);
73
74        PhoneBackButton.Listen(ConfirmExit, "");
75        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "");
76        Keyboard.Listen(Key.Enter, ButtonState.Pressed, () => ProcessCommands(cmd_line, cmd_out), "");
77
78        // Create netmap
79        netmap = new Widget(cmd_out.Width + MARGINS, Window.Height / 2 - MARGINS * 2);
80        netmap.SizingByLayout = false;
81        netmap.Layout = new RowLayout();
82        netmap.X = Window.Width - cmd_out.Width * 2.5 - MARGINS * 4.5;
83        netmap.Y = netmap.Height / 2 + MARGINS;
84        netmap.Color = Color.Black;
85        netmap.BorderColor = Color.LimeGreen;
86        Add(netmap);
87        foreach (Device i in netmap_list)
88        {
89            netmap.Add(i);
90        }
91
92
93        Widget device_info = new Widget(cmd_out.Width + MARGINS, Window.Height / 2 - MARGINS * 2);
94        device_info.SizingByLayout = false;
95        device_info.Layout = new VerticalLayout();
96        device_info.X = Window.Width - cmd_out.Width * 2.5 - MARGINS * 4.5;
97        device_info.Y = Window.Height - device_info.Height * 2.5 - MARGINS * 4;
98        device_info.Color = Color.Black;
99        device_info.BorderColor = Color.LimeGreen;
100        Add(device_info);
101
102        Label info_title = new Label("Hostname: ");
103        info_title.TextColor = Color.LimeGreen;
104        info_title.Font = SOURCECODE_FONT;
105        Label info_ports = new Label("Open Ports: ");
106        info_ports.TextColor = Color.LimeGreen;
107        info_ports.Font = SOURCECODE_FONT;
108        Label info_fwall = new Label("Firewall: ");
109        info_fwall.TextColor = Color.LimeGreen;
110        info_fwall.Font = SOURCECODE_FONT;
111
112        device_info.Add(info_title);
113        device_info.Add(info_ports);
114        device_info.Add(info_fwall);
115
116        /* foreach (Device i in netmap_list)
117         {
118             for (int j = 0; j < i.Image.Width; j++)
119                 for (int k = 0; k < i.Image.Height; k++)
120                 {
121                     //i.Image[k, j] = Color.Red;
122
123                     if (i.Image[k, j] != Color.Transparent)
124                     {
125                         i.Image[k, j] = Color.LimeGreen;
126                     }
127                 }
128             //i.Image.ReplaceColor(Color.White, Color.LimeGreen);
129         }*/
130
131        Mouse.ListenMovement(1.0, checkHover, "");
132    }
133    void ProcessCommands(InputBox cmd_line, Label cmd_out)
134    {
135        /*
136         * Processes commands entered by the user.
137         */
138        String cmd = cmd_line.Text;
139        PrintOutput(cmd_out, usr_name + "@Host ~/ #" + cmd_line.Text);
140        cmd_line.Text = "";
141        String output = "";
142        // Echo something
143        if (cmd.StartsWith("echo "))
144        {
145            output = cmd.Split(' ')[1];
146        }
147        // Exit
148        else if (cmd.StartsWith("shutdown"))
149        {
150            Exit();
151        }
152        // Connect to system
153        else if (cmd.StartsWith("connect") || cmd.StartsWith("ssh"))
154        {
155            String address = cmd.Split(' ')[1];
156            Console.WriteLine("Address Entered : " + address);
157            bool is_dev_found = new bool();
158            is_dev_found = false;
159            foreach(Device i in netmap_list)
160            {
161                if (i.Addr == address)
162                {
163                    current_device = i;
164                    break;
165                    is_dev_found = true;
166                } 
167            }
168            if (is_dev_found)
169            {
170                Console.Write("Found device");
171            }
172            else
173            {
174                output = cmd + " : Invalid address.";
175            }
176        }   
177        else
178        {
179            output = cmd + " : Command not found.";
180        }
181        Timer.SingleShot(0.1, () => PrintOutput(cmd_out, output));
182    }
183    void PrintOutput(Label cmd_out, String txt)
184    {
185        /*
186         * Prints text to the output box
187         */
188        txt = System.Text.RegularExpressions.Regex.Replace(txt, @"[^\u0000-\u007F]+", string.Empty);
189        cmd_out.Text += (txt);
190        String[] rows = cmd_out.Text.Split('\n');
191        List<String> row_list = new List<String>(rows);
192        while (row_list.Count > Window.Height / cmd_out.Font.CharacterHeight)
193        {
194            row_list.RemoveAt(0);
195        }
196        cmd_out.Text = "";
197        foreach (String row in row_list)
198        {
199            cmd_out.Text += row + "\n";
200        }
201        //StringBuilder text = new StringBuilder(cmd_out.Text);
202    }
203
204    void checkHover(AnalogState mouseState)
205    {
206        foreach (Device i in netmap_list)
207        {
208
209            if (Vector.Distance(i.AbsolutePosition, Mouse.PositionOnWorld) < 23)
210            {
211                i.Image = device_icon_hover;
212            }
213            else
214            {
215                i.Image = device_icon;
216            }
217        }
218    }
219}
220
221class Device : GameObject
222{
223    public String Title;
224    public String Addr;
225    public String Password;
226    public Dictionary<String, String> Files;
227    public Dictionary<int, Tuple<String, bool>> Ports;
228    public bool Firewall;
229
230    public Device(Image device_icon, String title, String address, String password, bool firewall) : base(50, 50)
231    {
232        Image = device_icon;
233        Title = title;
234        Addr = address;
235        Password = password;
236        Firewall = firewall;
237    }
238
239    public int OpenPort(int num)
240    {
241        if (!Firewall)
242        {
243            Ports[num] = Tuple.Create(Ports[num].Item1, false);
244            return 1;
245        }
246        return 0;
247    }
248}
Note: See TracBrowser for help on using the repository browser.