Since I have been using the ATtiny series of IC from microchip using the AVR instruction set I kept an eye out for similar chips.
After a few google searches I found 2 potential competitors:
Puya with their PY32F003F14P6T 32 Bit MCU 32bit ARM ® Cortex ® -M0+ Microcontroller Integrated Circuit
and
WCH (WinChipHead) with their CH32V003F4P6 series based on the 32-bit QingKe RISC-V2A core.
After some research I decided to purchase some of the WCH IC’s for testing. I setup a platform IO development environment and starter using the ch32v003fun open source software development stack for the CH32V003.
There is an Arduino core from the official WCH guys but it is still limited and slow for power users.
Once I finished setting up I found it very easy and intuitive to use the ch32v003fun development stack. There is a learning curve but I was able to test all my WCH chips within minutes. I purchased the CH32V003J4M64-pin, CH32V003A4M616-pin, CH32V003F4P620-pin, CH32V203C8T648-pin and the QFN20 CH32V003F4U620-pin.
Modernizing the old UPSilon 2000 application was a daunting task my first thought was to read the serial output but unfortunately the UPS is listed as a HID device and not a simple COM port. So I went down the rabbit hole of trying to communicate with hid devices which have strict security to combat keyloggers. I tried to use kernel32 and the create file read and write file methods but I got access denied. Looking closer I could read some of the inputs of the ups hid device but it was going to take too long to figure out direct communication to the ups without an SDK or a good example app using USB HID to communicate with a UPS.
Some details of my ups hid were: VID = 0001 PID = 0000 Path = \?\hid#vid_0001&pid_0000#6&7efa158&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030} SerialNumber = Manufacturer = MEC Product: MEC0003
So after wasting 2 days I went back to the drawing board this time instead of using Wireshark to catch the USB packets I decided to take a closer look at the upsilon 2000 application. unfortunately the .dll's don’t show any useful functions in dependency viewer so I can’t call C++ functions from them in C#. So next I switched Wireshark to local monitoring and I found some very useful traffic.
tcp.port == 2570 connect as a client and get data tcp.port == 8652 read the data from the sms server udp.port == 11541 udp data
Port 8652 allows me to read alerts sent to the SMS server but instead I re-direct them to my C# application.
GET /smssend_hide.cgi?$sms_recptmobile=0123456789&$sms_content=DESKTOP-294DAYV: This is a test message!&$sms_code=1 HTTP/1.1 User-Agent: RUPS2K SMS Host: 127.0.0.1 Connection: Keep-Alive
Port 2570 allows me to TCP connect as a client with no auth and now I get all the stat report strings every 1 second.
(238.7 238.7 238.7 007 50.1 27.4 --.- 00001000
The UDP port 11541 always receives upsXXXcnt001 for constant monitoring and I haven’t observed any other use besides this.
ups000cnt001 – connected ups upsdiscnt001 – not connected
The exe files communicating between themselves are Monw32.exe 11541 udp listner RupsMon.exe 2570 tcp listner UPSilon.exe connects as client
So after finding this info I was able to build a C# app that works in conjunction with UPSilon 2000 but the C# app offers more flexibility such as remote messaging via Telegram or forwarding the stats to a webserver for remote viewing.
The application checks the cd key every time it starts it connects to an IP in Taiwan http://upsilon.icv99.net on port 80 however is you go to port 8080 you get a webpage cd key checking form. http://59.124.238.71:80 http://upsilon.icv99.net:8080/download_sys/ http://upsilon.icv99.net:8080/download_sys/keycheck.php?cdkey_check=testkey
The only thing I couldn’t do was send commands directly to the ups because that communication link is done within the upsilon app itself however I am happy with the overall outcome.
Source code of my application can be found on GitHub
#89 An example app showing a practical use case with the API
Using the Eskom load-shedding API is very straight forward however I have noticed that a lot of people get stuck on the last call where an html document is returned instead of Json data. This can throw a spanner in the works because a developer can’t just get the results as a key value pair… the HTML must be parsed and then put into Json before it can be used effectively.
This parsing process is actually quite easy and jut requires a loop with a bit of regex magic to return the values line by line.
Once the values are returned we can then place them into our own Json object and then do something useful with them like creating a loop which reads the times and compares them to the time on my PC then when the json objects time is 10 minutes away the loop then initiates a shutdown of my fan so that it doesn’t drain my ups battery unnecessarily.
Below I have written a small proof of concept application in C# to help inspire others with their projects.
When I think about trainers 3 things come to mind.. original chiptunes, nostalgic games on windows and imaginative unique art styles. funny enough there was a decent amount of programming hacks and tricks used but people rarely think of that nowadays.
I have created an example template application with just the chiptunes and a little bit of art included. I will not include any logic for cracking games or programs etc. this article is just focusing on the visual and music design for nostalgic and educational purposes.
Please se the GitHub link to the source code here.
Back when Keygens and Trainers were the go to applications for poor kids wanting to play the latest games or experiment with the latest software’s the chiptune went hand in glove with these tiny applications. These applications were almost exclusively found on Windows computers
These applications were designed to be as small as possible many of them were written in Assembly or C++ and had all the resources embedded in the .exe at highly compressed ratios.
Even with the music file and the graphics accommodating the functionality of these programs they still managed to stay very small in size.
Thus a whole culture surrounding the traditional past time of “cracking” was born. Unfortunately there’s not much practical use for these activity’s in this day and age. Almost everything revolves around the “Internet Browser” and “Web Applications”. However artistically the past time lives on and we can still create these applications in Assembly, C#, C++ etc. as desktop applications.
#83 The differences between .Net Framework and .Net Core
.Net Framework was created around the year 2000. It’s not just C#, languages are built on top of the .Net Framework. they language like C# are converted into the common intermediate language (CIL).
.Net Framework is now over 20 years old. there’s a lot of checks and processes that have been added which bloat the system. However this is necessary because the .Net Framework still needs to work with older applications E.G an app made in the early 2000s.
So basically the .Net Framework is slowing down apps in the new world of software so many new advancements can’t be leveraged by the .Net Framework.
In 2016 Microsoft started the process of .Net Core. which is a new improved version of the .Net Framework with changes like how processes are executed and what is supported/not supported. Also a lot of backward compatibility has been removed for things no longer needed.
.Net Core has a massive speed increase compared to .Net Framework. Also the code in .Net Framework will run 97% of the time in .Net core however some structures and 3rd party dependencies will have to be changed this is true as of [.Net Core 5].
.Net Framework will still be supported for many years, however new development should be using .Net Core.
Just a quick C# working example of a FreeTAKServer Manager application for the Windows OS.
WinForms & WPF versions are supported.
The FreeTAKServer Manager C# application was created to make using the current v1.7 of FreeTAKServer more user friendly.
FreeTAKServer Manager has the ability to Start, Stop, Restart, Install and Uninstall the FreeTAKServer & FreeTAKServer-UI.
It can also start on startup, send alert emails, let the user test the API (localhost & custom), allow quick MainConfig.py & config.py edits, Open a portforward testing page.
The App requires Admin privilege in order to run cmd commands effectively.
Remove all previous Python environment variables (if you have them) because they mess up the paths.
In November last year I had a client that was looking for a geospatial situational awareness ecosystem for their security guards. Upon researching I found out the the ATAK (Android Team Awareness Kit) system was released to the public earlier that year (2020)
ATAK is just one team awareness kit medium of many. Other mediums which are integrated into this TAK solution are WinTAK and the FreeTAKServer these are all available to the public at this time. Check out the awesome FreeTAKTeam Github here.
FreeTAKServer works as the connector between the ATAK-CIV and WinTAK-CIV platforms. As of the date today FreeTAKServer is still in development and wonderful new features and plugins are being developed to be shared with the Github community.
The definition of ATAK according to the wiki is as follows:
Android Team Awareness Kit (ATAK) is an Android smartphone geospatial infrastructure and military situation awareness app. It allows for precision targeting, surrounding land formation intelligence, situational awareness, navigation, and data sharing. This Android app is a part of the larger TAK family of products.
For more info on the FreeTAKServer check out the YouTube video series by * DA-B6 *here also please check out the ATAK MAP YouTube page here
While creating a download page for a website I came across the problem where the browser would open a .PDF file instead of downloading it to the desktop of my PC when using the JavaScript window.location.href = "url/path/file.pdf"; function. A quick easy solution is to archive the .PDF document as a .ZIP file or .7z etc. Now when the function is called the file will be downloaded.
Using a quick C# WinForms application I was able to automate the process. Here I have included a small demo project which may be useful on windows machines.
The Main function is as below:
A new process is started and Arguments are sent to the 7za.exe console application.
7za.exe can also be used in the CMD console as well as with scripting languages such as PowerShell or Batch.