DoubleLabyrinth / GPGMail-crack

A crack solution for GPGMail of 2019.1
53 stars 9 forks source link

Does not work on 2019.2 #1

Open ghost opened 4 years ago

ghost commented 4 years ago

This does not appear to work with the 2019.2 release of GpgTools (version 4).

DoubleLabyrinth commented 4 years ago

Well, GPGMail has changed activation algorithm. License validation is handled in

// @/Library/Application\ Support/GPGTools/GPGMail/GPGMail_4.mailbundle/Contents/MacOS/GPGMail
void __cdecl -[GMSupportPlan validateSignature](GMSupportPlan *self, SEL a2)

The public key is in a self-signed certificate:

MIIEWjCCAsKgAwIBAgIUBpfAcF0mUJQIT4tAmfPWMYIUrP4wDQYJKoZIhvcNAQELBQAwXjELMAkGA1UEBhMCQVQxEDAOBgNVBAgMB0F1c3RyaWExDzANBgNVBAcMBlZpZW5uYTEWMBQGA1UECgwNR1BHVG9vbHMgR21iSDEUMBIGA1UEAwwLR1BHVG9vbHMgQ0EwHhcNMTkxMTEwMDEyMDQyWhcNMjQxMTA4MDEyMDQyWjBeMQswCQYDVQQGEwJBVDEQMA4GA1UECAwHQXVzdHJpYTEPMA0GA1UEBwwGVmllbm5hMRYwFAYDVQQKDA1HUEdUb29scyBHbWJIMRQwEgYDVQQDDAtHUEdUb29scyBDQTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAMA9jImqn9peLMKDJESzKvEpsDnjsiUXQdQucd7jFA7k5coSfrnpSvNVWh4n4vQy4GnEgzjnVR5nzxCOs4bMWGT6oSBHyqYhVMRV0x8WpA9fcMH0O/IYBtFGXX2BCnIXeqeIYbgaQ+3rlopjAiv78EJ3lWrTmjQNBFHqipem1qdbfPur+3ELssl6hHojz/JzW7FkS2P3/++6SHsBBMD+gHQp4R3IyGmPM6YAkFSeuxtA/Z3bK7bogtuPV8DXIT7sqK66f8P0dD8cKmEWKeaub41YxDeNR9wa0KBuTIdjzkeXFloBK7uzu54AvWM3sSJdGJ8UBdXJIf+pMV+qeY/CrPwcFiRdOwDRyia#UsPUYkthtCI9dARlMlvdmZ+OJZePI5nbfxnrqBQKWAhknCwcKG9/UYf3PeJpHM0cVvvF+LK1KQ3rZlFzN+KplLB2fL5AZEgObKbv7IAc3uqPjKqEXdgwBnHsKFCwLHX8x16KiMP4sNm9rZ5+juS3l+DJYYW/QIDAQABoxAwDjAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBgQAoebPba0MdlfAfDKbhxySSayBHY7uPG2RS7EA0JKthV77cZZQ5kl+JikubAEZ4inIj7rOkHcrk5vnGAoZpUpNKAGdUjPUKIFEibljivy7Wu4Zlq7xH7Qa8qJq5AF4sqpiLq59kY4jfXMlpO79TqL3g3jxYkEgMn9CYclTsa+7XlyteVaU+xUf3mgku1xpUj3/EYiKDJqx2nZYPyqD/yhTSIVF97CURKyJ30ErrOSJQvcCkenUkglPzr/ksMaQm8lcTVnat4NIwrkplsgN32x/5M9MonVMd5aSJEnaudEqUt4oDKhujYZsQVUF7rp/RMdhldErpodwaVcFHTiH9cpw0F15w3jLuGkyqbZmwRnwEJUZVx0HYza8qW+I4sMSw1JOkfgVKD776aBTZ96EqKx8e+zwcwcWLT0KWXv5JgEmqVyTJlfdYcns3tFzTmqqzgk7qJ/zOs4EJD0zrsPVTP+3jQjLSOlzIXdpMEDIe63qmq1KHVfyyHZdnbidN7PE/pAM=

#
# replace "#" with "//" and save base64-decoded bytes as a DER file.
#
$ openssl x509 -in gpgtools.der -inform der -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            06:97:c0:70:5d:26:50:94:08:4f:8b:40:99:f3:d6:31:82:14:ac:fe
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=AT, ST=Austria, L=Vienna, O=GPGTools GmbH, CN=GPGTools CA
        Validity
            Not Before: Nov 10 01:20:42 2019 GMT
            Not After : Nov  8 01:20:42 2024 GMT
        Subject: C=AT, ST=Austria, L=Vienna, O=GPGTools GmbH, CN=GPGTools CA
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (3072 bit)
                Modulus:
                    00:c0:3d:8c:89:aa:9f:da:5e:2c:c2:83:24:44:b3:
                    2a:f1:29:b0:39:e3:b2:25:17:41:d4:2e:71:de:e3:
                    14:0e:e4:e5:ca:12:7e:b9:e9:4a:f3:55:5a:1e:27:
                    e2:f4:32:e0:69:c4:83:38:e7:55:1e:67:cf:10:8e:
                    b3:86:cc:58:64:fa:a1:20:47:ca:a6:21:54:c4:55:
                    d3:1f:16:a4:0f:5f:70:c1:f4:3b:f2:18:06:d1:46:
                    5d:7d:81:0a:72:17:7a:a7:88:61:b8:1a:43:ed:eb:
                    96:8a:63:02:2b:fb:f0:42:77:95:6a:d3:9a:34:0d:
                    04:51:ea:8a:97:a6:d6:a7:5b:7c:fb:ab:fb:71:0b:
                    b2:c9:7a:84:7a:23:cf:f2:73:5b:b1:64:4b:63:f7:
                    ff:ef:ba:48:7b:01:04:c0:fe:80:74:29:e1:1d:c8:
                    c8:69:8f:33:a6:00:90:54:9e:bb:1b:40:fd:9d:db:
                    2b:b6:e8:82:db:8f:57:c0:d7:21:3e:ec:a8:ae:ba:
                    7f:c3:f4:74:3f:1c:2a:61:16:29:e6:ae:6f:8d:58:
                    c4:37:8d:47:dc:1a:d0:a0:6e:4c:87:63:ce:47:97:
                    16:5a:01:2b:bb:b3:bb:9e:00:bd:63:37:b1:22:5d:
                    18:9f:14:05:d5:c9:21:ff:a9:31:5f:aa:79:8f:c2:
                    ac:fc:1c:16:24:5d:3b:00:d1:ca:26:bf:fd:4b:0f:
                    51:89:2d:86:d0:88:f5:d0:11:94:c9:6f:76:66:7e:
                    38:96:5e:3c:8e:67:6d:fc:67:ae:a0:50:29:60:21:
                    92:70:b0:70:a1:bd:fd:46:1f:dc:f7:89:a4:73:34:
                    71:5b:ef:17:e2:ca:d4:a4:37:ad:99:45:cc:df:8a:
                    a6:52:c1:d9:f2:f9:01:91:20:39:b2:9b:bf:b2:00:
                    73:7b:aa:3e:32:aa:11:77:60:c0:19:c7:b0:a1:42:
                    c0:b1:d7:f3:1d:7a:2a:23:0f:e2:c3:66:f6:b6:79:
                    fa:3b:92:de:5f:83:25:86:16:fd
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:FALSE
    Signature Algorithm: sha256WithRSAEncryption
         28:79:b3:db:6b:43:1d:95:f0:1f:0c:a6:e1:c7:24:92:6b:20:
         47:63:bb:8f:1b:64:52:ec:40:34:24:ab:61:57:be:dc:65:94:
         39:92:5f:89:8a:4b:9b:00:46:78:8a:72:23:ee:b3:a4:1d:ca:
         e4:e6:f9:c6:02:86:69:52:93:4a:00:67:54:8c:f5:0a:20:51:
         22:6e:58:e2:bf:2e:d6:bb:86:65:ab:bc:47:ed:06:bc:a8:9a:
         b9:00:5e:2c:aa:98:8b:ab:9f:64:63:88:df:5c:c9:69:3b:bf:
         53:a8:bd:e0:de:3c:58:90:48:0c:9f:d0:98:72:54:ec:6b:ee:
         d7:97:2b:5e:55:a5:3e:c5:47:f7:9a:09:2e:d7:1a:54:8f:7f:
         c4:62:22:83:26:ac:76:9d:96:0f:ca:a0:ff:ca:14:d2:21:51:
         7d:ec:25:11:2b:22:77:d0:4a:eb:39:22:50:bd:c0:a4:7a:75:
         24:82:53:f3:af:f9:2c:31:a4:26:f2:57:13:56:76:ad:e0:d2:
         30:ae:4a:65:b2:03:77:db:1f:f9:33:d3:28:9d:53:1d:e5:a4:
         89:12:76:ae:74:4a:94:b7:8a:03:2a:1b:a3:61:9b:10:55:41:
         7b:ae:9f:d1:31:d8:65:74:4a:e9:a1:dc:1a:55:c1:47:4e:21:
         fd:72:9c:34:17:5e:70:de:32:ee:1a:4c:aa:6d:99:b0:46:7c:
         04:25:46:55:c7:41:d8:cd:af:2a:5b:e2:38:b0:c4:b0:d4:93:
         a4:7e:05:4a:0f:be:fa:68:14:d9:f7:a1:2a:2b:1f:1e:fb:3c:
         1c:c1:c5:8b:4f:42:96:5e:fe:49:80:49:aa:57:24:c9:95:f7:
         58:72:7b:37:b4:5c:d3:9a:aa:b3:82:4e:ea:27:fc:ce:b3:81:
         09:0f:4c:eb:b0:f5:53:3f:ed:e3:42:32:d2:3a:5c:c8:5d:da:
         4c:10:32:1e:eb:7a:a6:ab:52:87:55:fc:b2:1d:97:67:6e:27:
         4d:ec:f1:3f:a4:03

Also, I've found a fallback-trial license:

eyJhY3RpdmF0aW9uIjp7InR5cGUiOiJmYWxsYmFja3RyaWFsIiwiZGlkIjoyMDAwMDAwMDAsInVkaWQiOiIiLCJ1cGRhdGVkIjoxNTczODMxMDI5LCJpc3N1ZWQiOmZhbHNlLCJhcHAiOiJvcmcuZ3BndG9vbHMuZ3BnbWFpbDQiLCJlbGlnaWJsZV9hcHBzIjp7IjQiOiJvcmcuZ3BndG9vbHMuZ3BnbWFpbDQiLCIzIjoib3JnLmdwZ3Rvb2xzLmdwZ21haWwifSwicmVmcmVzaCI6MTYwNTM2NzAyOSwiZXhwaXJhdGlvbiI6ZmFsc2V9LCJtZXRhIjp7InNpZyI6IkIwekhFNHNodlk5eXk0bldCMEZnVndrNml2ZXlManFUNzNrdjdMRjRDMElUWXRubG52UlZMbjBob2N2S3VDeThMK29RXC9MTVQ1XC9xVGJDNDUzdkJZVjNNU2NqWDlsMmZ5eDZqdG5tUlRMaTNibFBlXC83TzFMdW43Mld0S3Z1RHFCQTlMeTZBNktvZHcxb2o2bzhUNEF3VVA1TXpqTUhUUE16YXU1Z2p0NElXbFdIMk8rZ2E4VjZkVE00NTZQV1BZNjNwdlNkRU9qa29nRlp5UkVsSDR1aTZqckJJMlwvK3REVkhnZjljVURwaGdCa3JcL2hMd0JTa2hLMVFwRWtQcDZLVk9XMm82MkExZ3RyVmJpb1k0M2VSSUZqNDU3ckFtaVR1a2k5V1hmd1ZiMzNScXZob1lwaENXVlRETWcrRFVjTzlVNGM0N1FjWWJEV1hqZTM5WGlkS2ZwZ1RpaDVmbldlYmkyRjcxXC84VVU3Nm9XTTFvdDltYlpuVXBTY05QVDR1NUMyYUtHY29DbG1GekYxZFFYU1I3OXZXVkVZZUVIUWR5VVpkc2FzT2ZyWEIyUGxJa01ub1hORmprM2N4WCtKMXlKQXJcL1ZCeVhMUUZKWnRGMWlVeHViaHp3OFNobENQMXNid0tjVlNqcXFuazhZRDFBRjJSVjA0eXYrWU11MU1cL2QifX0=

#
# after base64 decode:
#
{"activation":{"type":"fallbacktrial","did":200000000,"udid":"","updated":1573831029,"issued":false,"app":"org.gpgtools.gpgmail4","eligible_apps":{"4":"org.gpgtools.gpgmail4","3":"org.gpgtools.gpgmail"},"refresh":1605367029,"expiration":false},"meta":{"sig":"B0zHE4shvY9yy4nWB0FgVwk6iveyLjqT73kv7LF4C0ITYtnlnvRVLn0hocvKuCy8L+oQ\\/LMT5\\/qTbC453vBYV3MScjX9l2fyx6jtnmRTLi3blPe\\/7O1Lun72WtKvuDqBA9Ly6A6Kodw1oj6o8T4AwUP5MzjMHTPMzau5gjt4IWlWH2O+ga8V6dTM456PWPY63pvSdEOjkogFZyRElH4ui6jrBI2\\/+tDVHgf9cUDphgBkr\\/hLwBSkhK1QpEkPp6KVOW2o62A1gtrVbioY43eRIFj457rAmiTuki9WXfwVb33RqvhoYphCWVTDMg+DUcO9U4c47QcYbDWXje39XidKfpgTih5fnWebi2F71\\/8UU76oWM1ot9mbZnUpScNPT4u5C2aKGcoClmFzF1dQXSR79vWVEYeEHQdyUZdsasOfrXB2PlIkMnoXNFjk3cxX+J1yJAr\\/VByXLQFJZtF1iUxubhzw8ShlCP1sbwKcVSjqqnk8YD1AF2RV04yv+YMu1M\\/d"}}

It seems we have to make a patch to GPGMail_4.mailbundle.

Tyzlor commented 4 years ago

Hi there

Any luck getting this working ?

scalessio commented 4 years ago

Hi guys, Currently this crack doesn't work for gpg suite?

TriplelLabyrinth commented 4 years ago

Ugly but working 1 byte patch:

1) remove code signature from plugin (needs Xcode installed for codesign command):

sudo codesign --remove-signature "/Library/Application Support/GPGTools/GPGMail/GPGMail_4.mailbundle"

2) patch file "/Library/Application Support/GPGTools/GPGMail/GPGMail_4.mailbundle":

- find:   "48 89 DF 48 89  C2  41 FF D5 48 89 C7"
- change: "48 89 DF 48 89 *DA* 41 FF D5 48 89 C7"

This slightly extends the trial period to: "140735534324888 days remaining"

casajaguar commented 4 years ago

Hi, Can you help me? I don’t know how to patch that file. In fact I found that file is a directory. Maybe I don’t know how to patch, sorry.

Thanks

El 28 abr. 2020, a las 10:26, TriplelLabyrinth notifications@github.com escribió:

Ugly but working 1 byte patch:

remove code signature from plugin (needs Xcode installed for codesign command): sudo codesign --remove-signature "/Library/Application Support/GPGTools/GPGMail/GPGMail_4.mailbundle" patch file "/Library/Application Support/GPGTools/GPGMail/GPGMail_4.mailbundle":

  • find: "48 89 DF 48 89 C2 41 FF D5 48 89 C7"
  • change: "48 89 DF 48 89 DA 41 FF D5 48 89 C7" This slightly extends the trial period to: "140735534324888 days remaining"

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/DoubleLabyrinth/GPGMail-crack/issues/1#issuecomment-620606471, or unsubscribe https://github.com/notifications/unsubscribe-auth/AICPNVJHAOWCPGXEUV3MMSTRO3KO3ANCNFSM4JRPN7NA.

NicApicella commented 4 years ago

@TriplelLabyrinth: Which file exactly should be patched?

1. patch file "/Library/Application Support/GPGTools/GPGMail/GPGMail_4.mailbundle":

The .mailbundle is a directory; are you sure about that command? Could it be you meant, within that bundle, the file /Contents/MacOS/GPGMail? Also: Maybe you have the address of where the code is within the file? I found the string at 0001b0c0; does it look good? :-)

chenguokai commented 4 years ago

@casajaguar @NicApicella Just patch Contents/MacOS/GPGMail and that's it:)

casajaguar commented 4 years ago

I could patch the file and extend the trial period but I think that is not modifying the condition of trial expired so I couldn’t encrypt mails Someone know if it’s possible to solve this?

Regards

El 12 may. 2020, a las 07:19, Xim notifications@github.com escribió:

@casajaguar https://github.com/casajaguar @NicApicella https://github.com/NicApicella Just patch Contents/MacOS/GPGMail and that's it:)

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/DoubleLabyrinth/GPGMail-crack/issues/1#issuecomment-627251260, or unsubscribe https://github.com/notifications/unsubscribe-auth/AICPNVOQPANZKJZ4ID5NDYLRREPEFANCNFSM4JRPN7NA.

QuatrupleLabyrinth commented 4 years ago

Ok... 30 days later found that the other patch just was cosmetic. Here the real deal:

  1. remove code signature from plugin (needs Xcode installed for codesign command):
sudo codesign --remove-signature "/Library/Application Support/GPGTools/GPGMail/GPGMail_4.mailbundle"
  1. patch file:
"/Library/Application Support/GPGTools/GPGMail/GPGMail_4.mailbundle/Contents/MacOS/GPGMail"

- find:   "FF 15 F4 F8 02 00 84 C0 0F 95 C0 EB 02 31 C0 0F B6 C0"
- change: "FF 15 F4 F8 02 00 84 C0 0F 95 C0 90 90 B8 01 00 00 00"
casajaguar commented 4 years ago

Perfect! Thanks

El 29 may. 2020, a las 10:43, QuatrupleLabyrinth notifications@github.com escribió:

Ok... 30 days later found that the other patch just was cosmetic. Here the real deal:

remove code signature from plugin (needs Xcode installed for codesign command): sudo codesign --remove-signature "/Library/Application Support/GPGTools/GPGMail/GPGMail_4.mailbundle" patch file: "/Library/Application Support/GPGTools/GPGMail/GPGMail_4.mailbundle/Contents/MacOS/GPGMail"

  • find: "FF 15 F4 F8 02 00 84 C0 0F 95 C0 EB 02 31 C0 0F B6 C0"
  • change: "FF 15 F4 F8 02 00 84 C0 0F 95 C0 90 90 B8 01 00 00 00"

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/DoubleLabyrinth/GPGMail-crack/issues/1#issuecomment-635979552, or unsubscribe https://github.com/notifications/unsubscribe-auth/AICPNVOFYSJHGPXN6N2E6OLRT63XHANCNFSM4JRPN7NA.

QuintupleLabyrinth commented 4 years ago

Update for 2020.1 update (more generic patch also works for 2019.2):

  1. remove code signature from plugin (needs Xcode installed for codesign command):
sudo codesign --remove-signature "/Library/Application Support/GPGTools/GPGMail/GPGMail_4.mailbundle"
  1. patch file:
"/Library/Application Support/GPGTools/GPGMail/GPGMail_4.mailbundle/Contents/MacOS/GPGMail"
- find:   "02 00 84 C0 0F 95 C0 EB 02 31 C0 0F B6 C0"
- change: "02 00 84 C0 0F 95 C0 90 90 B8 01 00 00 00"
austinhuang0131 commented 4 years ago

Don't think the new one is working, it's still counting down. (it works but it still shows up "trial expired" occasionally)

阁下是否考虑过伪装support-plan.gpgtools.org

aperture147 commented 3 years ago

Update for 2020.1 update (more generic patch also works for 2019.2):

  1. remove code signature from plugin (needs Xcode installed for codesign command):
sudo codesign --remove-signature "/Library/Application Support/GPGTools/GPGMail/GPGMail_4.mailbundle"
  1. patch file:
"/Library/Application Support/GPGTools/GPGMail/GPGMail_4.mailbundle/Contents/MacOS/GPGMail"
- find:   "02 00 84 C0 0F 95 C0 EB 02 31 C0 0F B6 C0"
- change: "02 00 84 C0 0F 95 C0 90 90 B8 01 00 00 00"

Is this patch still work on 2020.2?

avarayr commented 3 years ago

2021.1 (on big sur)

sudo codesign --remove-signature /Library/Application\ Support/GPGTools/GPGMail/GPGMail_5.mailbundle

find: ff 15 17 b3 02 00 84 c0 0f 94 c0 eb 02 31 c0 0f b6 c0 replace: ff 15 17 b3 02 00 84 c0 0f 94 c0 90 90 B8 01 00 00 00

... alternative patch if above doesn't work ... find: ff 15 17 b3 02 00 84 c0 0f 94 c0 eb 02 31 c0 0f b6 c0 replace: ff 15 17 b3 02 00 3c ff 0f 95 c0 eb 02 31 c0 0f b6 c0 ... ....

sudo codesign --force --deep --sign - /Library/Application\ Support/GPGTools/GPGMail/GPGMail_5.mailbundle

note: your trial will tick but will never expire

📝 don't forget to uncheck the "automatically update"

for security, also add this to /etc/hosts

0.0.0.0 support-plan.gpgtools.org
casajaguar commented 3 years ago

Hello, Someone knows why I cannot save the modified GPGMail? I had remove the signature before without errors but hex editors are not being able to save the file.

Regards
Matias

On 21 Aug 2021, at 20:51, Avarayr @.***> wrote:

2021.1

sudo codesign --remove-signature /Library/Application\ Support/GPGTools/GPGMail/GPGMail_5.mailbundle

find: ff 15 17 b3 02 00 84 c0 0f 94 c0 eb 02 31 c0 0f b6 c0 replace: ff 15 17 b3 02 00 84 c0 0f 94 c0 90 90 B8 01 00 00 00

sudo codesign --force --deep --sign - /Library/Application\ Support/GPGTools/GPGMail/GPGMail_5.mailbundle

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/DoubleLabyrinth/GPGMail-crack/issues/1#issuecomment-903189791, or unsubscribe https://github.com/notifications/unsubscribe-auth/AICPNVNMCMVKJTH54IMEVJ3T6A3WNANCNFSM4JRPN7NA. Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email.

avarayr commented 3 years ago

Hello, Someone knows why I cannot save the modified GPGMail? I had remove the signature before without errors but hex editors are not being able to save the file. Regards Matias On 21 Aug 2021, at 20:51, Avarayr @.***> wrote: 2021.1 sudo codesign --remove-signature /Library/Application\ Support/GPGTools/GPGMail/GPGMail_5.mailbundle find: ff 15 17 b3 02 00 84 c0 0f 94 c0 eb 02 31 c0 0f b6 c0 replace: ff 15 17 b3 02 00 84 c0 0f 94 c0 90 90 B8 01 00 00 00 sudo codesign --force --deep --sign - /Library/Application\ Support/GPGTools/GPGMail/GPGMail_5.mailbundle — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub <#1 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AICPNVNMCMVKJTH54IMEVJ3T6A3WNANCNFSM4JRPN7NA. Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email.

Try to open your hex editor as sudo

QAQDE commented 2 years ago

Hi,

I am currently using high serria, 2020.1 version of GPG Mail

As above saying, I want to patch the file and to change the code

"/Library/Application Support/GPGTools/GPGMail/GPGMail_4.mailbundle/Contents/MacOS/GPGMail"

But sadly I do not know how to edit the unix file, is there any tutorial that could teach me to do so?