nmikhailov / Validity90

Reverse engineering of Validity/Synaptics 138a:0090, 138a:0094, 138a:0097, 06cb:0081, 06cb:009a fingerprint readers protocol
GNU Lesser General Public License v2.1
1.85k stars 116 forks source link

Add support for 06cb:00be #73

Open JThyroff opened 5 years ago

JThyroff commented 5 years ago

It would be really nice, if i could use the fingerprintreader in my new lenovo Ideapad. ;)

msolefonte commented 4 years ago

+1

imreallyliam commented 4 years ago

Any progress on this?

pfuhlert commented 4 years ago

+1

jsplate commented 4 years ago

This project seems not quite active. There has been a little bit of hope for 20.04 Focal Fossa: https://askubuntu.com/questions/1214592/fingerprint-reader-lenovo-thinkpad-l13-synaptics-driver

pfuhlert commented 4 years ago

Anyone got it to work with 20.04?

imreallyliam commented 4 years ago

I have not got it working yet.

mandresve commented 4 years ago

I'll test it today. "You'll need at least fwmgr-1.3.5 and fprintd-1.90. Then enable testing remote in fwupdmgr. See here how: github.com/fwupd/fwupd/wiki/LVFS-Testing-remote The Firmware you need to install is listed here: fwupd.org/lvfs/search?value=prometheus"

p-try commented 4 years ago

It didn't work for me. The firmware from the link is for 00bd only according to the contained XML file.

imreallyliam commented 4 years ago

It does not support this device, unfortunately.

Freedom9339 commented 4 years ago

I've added $100 bounty on https://www.bountysource.com/issues/76164422-add-support-for-06cb-00be for anyone who can solve it. I need this.

daniromome commented 4 years ago

I too would like to see this supported +1

sherer-pro commented 4 years ago

I support, really need

quaxam commented 4 years ago

Support too, really need it soon :( So many advances in 00bd but not for our 00be

ADernild commented 3 years ago

I too would like to see this supported ☺️

suchipi commented 3 years ago

I added $250 to the bounty for this (non-expiring), so the bounty for this issue is now at $350.

nikolobok commented 3 years ago

I added $250 to the bounty for this (non-expiring), so the bounty for this issue is now at $350.

It wouldn`t be like buy a pancake on the street for some digits with any symbols.. rather like janitor or porter, do you ready to let him in?

Popax21 commented 3 years ago

It's been a while, but I'm currently working on reverse engineering the Windows driver for this model (Synaptics FM-3463 / 06cb:00be). Don't expect anything soon though, as the driver is complex and it's more a side project than my current focus. I'll post major updates on progress here (if that's OK).

kmanwar89 commented 3 years ago

Just purchased a Lenovo Ideapad 5 Flex (Model 14ITL05) and everything on Linux works except the fingerprint reader!

I'm on Mint 20 Uma, which uses Ubuntu 20.04 as it's base. Kernel is 5.11.0-22-generic and I have a 06cb:00be Synaptic device shown in the output of lsusb.

As a test, I just installed Ubuntu 21.04 on my machine in the hopes that a newer driver was included in the newer version - no luck, unfortunately.

If this shows any potential means of gaining traction, I may just increase the bounty to $500 total.

Popax21 commented 3 years ago

For anyone wondering how I'm progressing: I'm almost at the point of having fully functioning initialization & pairing routines. My reverse engineering effort started completly from scratch, so I didn't look much at the work inside this repo, but as it turns out, the tudor family of sensors (that's what they're called in the driver) shares some, but not all characteristics with the sensors which this repo focuses on. However, I was able to clarify many things, because I am reverse engineering the Windows driver (which conveniently has debug symbols/printfs inside of it), while (I think) they only looked at captured USB packets. I might create a pull request claryfing overlapping info. As of yet it's still to early to release anything, but when I do, I'll post the link (and any major updates on progress) here.

PS: Just speculation, but I belive that my driver could also work for 06cb:00bd sensors, without the need for a FW update. It might also possible that other sensors could work too, but so far I only tested it on my laptop's 06cb:00be one.

shaqman commented 3 years ago

For anyone wondering how I'm progressing: I'm almost at the point of having fully functioning initialization & pairing routines. My reverse engineering effort started completly from scratch, so I didn't look much at the work inside this repo, but as it turns out, the tudor family of sensors (that's what they're called in the driver) shares some, but not all characteristics with the sensors which this repo focuses on. However, I was able to clarify many things, because I am reverse engineering the Windows driver (which conveniently has debug symbols/printfs inside of it), while (I think) they only looked at captured USB packets. I might create a pull request claryfing overlapping info. As of yet it's still to early to release anything, but when I do, I'll post the link (and any major updates on progress) here.

PS: Just speculation, but I belive that my driver could also work for 06cb:00bd sensors, without the need for a FW update. It might also possible that other sensors could work too, but so far I only tested it on my laptop's 06cb:00be one.

Sounds a step in the right direction. I have the 06cb:00be sensor, so if you want me to confirm how it works here, I'm open to testing it. Just be adviced that I'm kinda new in this, so I might need more than the usual pointers if you are willing to.

frawgg commented 3 years ago

For anyone wondering how I'm progressing: I'm almost at the point of having fully functioning initialization & pairing routines. My reverse engineering effort started completly from scratch, so I didn't look much at the work inside this repo, but as it turns out, the tudor family of sensors (that's what they're called in the driver) shares some, but not all characteristics with the sensors which this repo focuses on. However, I was able to clarify many things, because I am reverse engineering the Windows driver (which conveniently has debug symbols/printfs inside of it), while (I think) they only looked at captured USB packets. I might create a pull request claryfing overlapping info. As of yet it's still to early to release anything, but when I do, I'll post the link (and any major updates on progress) here.

PS: Just speculation, but I belive that my driver could also work for 06cb:00bd sensors, without the need for a FW update. It might also possible that other sensors could work too, but so far I only tested it on my laptop's 06cb:00be one.

I'm also willing to be a guinea pig. I have an Ideapad Flex 5 (has 06cb:00be) with Arch that I can test it on. Like @shaqman, I have never been a driver tester so I may need a bit more instruction. Glad you're making progress, though!

Endermen1094 commented 3 years ago

For anyone wondering how I'm progressing: I'm almost at the point of having fully functioning initialization & pairing routines. My reverse engineering effort started completly from scratch, so I didn't look much at the work inside this repo, but as it turns out, the tudor family of sensors (that's what they're called in the driver) shares some, but not all characteristics with the sensors which this repo focuses on. However, I was able to clarify many things, because I am reverse engineering the Windows driver (which conveniently has debug symbols/printfs inside of it), while (I think) they only looked at captured USB packets. I might create a pull request claryfing overlapping info. As of yet it's still to early to release anything, but when I do, I'll post the link (and any major updates on progress) here. PS: Just speculation, but I belive that my driver could also work for 06cb:00bd sensors, without the need for a FW update. It might also possible that other sensors could work too, but so far I only tested it on my laptop's 06cb:00be one.

I'm also willing to be a guinea pig. I have an Ideapad Flex 5 (has 06cb:00be) with Arch that I can test it on. Like @shaqman, I have never been a driver tester so I may need a bit more instruction. Glad you're making progress, though!

I am too ok being a guinea pig.

patbakdev commented 3 years ago

Count me in for testing as well. I have a Lenovo IdeaPad S740 (06cb:00be Synaptics, Inc.) running Manjaro and 5.13 kernel

Popax21 commented 3 years ago

Well that was quick. A few days after getting initialization to work, I already have events (finger press/remove, etc) and image captures up and running. Yet I'm still not done. Image post processing and matching is still missing (the sensor has commands for that functionality). After I get that to run, I'll put everything in a Github repo and send the link here.

I'll probably release the driver in two stages: First, I'll release my prototype python driver, too check if it works on sensors in the wild and too fix any bugs. After that, I'll create a libfprint implementation, so that it can work with existing fingerprint infrastructure.

PS: Here's a little sneak peak: a capture of the side of my finger image

mandresve commented 3 years ago

Same as @patbakdev. Count me in for testing!. I have two Lenovo machines with 06cb:00be sensors from Synaptics. Also running Manjaro and 5.14.rc3 kernel.

pfuhlert commented 3 years ago

Hey that sounds very nice! I can also test if you need another one 👍 Currently I'm running on a Thinkpad L490 with the 06cb:00be sensor using Ubuntu 21.04

Popax21 commented 3 years ago

I just uploaded my current state of progress: https://github.com/Popax21/synaTudor. Note that some things are still incomplete, like on sensor matching, or a libfprint integration, but it should still be enough to do some first in-the-wild tests.

PS: I'm beginning to loose motivation for this project, so I might take a break from it. So if you don't hear anything from me for a while, that's the reason.

mandresve commented 3 years ago

Great effort @Popax21 It is working for me :smile: (Manjaro and 5.14.rc3 kernel) Thanks! I look forward to hearing from you soon.

patbakdev commented 3 years ago

Yes, this is great work. I had no problems. IdeaPad S740 with 5.10.53-1-MANJARO.

kmanwar89 commented 3 years ago

I'm so glad I commented on this because it seems I revived an issue that had kind of gone to sleep (but not quite yet died!)

I'm also willing to be a driver testing guinea pig. I have been using Linux for years but never really had to mess with drivers, so specific instructions will be appreciated.

In case no one else mentions it --- please make sure to backup your installs just in case something breaks :) I like to use Clonezilla to make an exact clone; that way I have no qualms about completely bricking my install during test, and restoring the backup takes <30 minutes.

kmanwar89 commented 3 years ago

@Popax21 - if this works and continues gaining traction, I'd like to donate to either:

1) A cause you care about on your behalf 2) An OSS project you support 3) Buy you a coffee/beer/wishlist item from Amazon.

Sincerely, thanks for your efforts with this. I'm still serious about helping the bounty up to $500!

Etaash-mathamsetty commented 3 years ago

I tried out the code on github, everything worked as expected. Can't wait for the libfprint implementation

Popax21 commented 3 years ago

I've just uploaded a (primitive) libfprint integration, which just calls the python driver library (because I'm not in the mood of converting it to C as of now). However, don't get your hopes up, because I discovered that without the post processing algorithm which I yet have to reverse engineer, libfprint doesn't produce successfull matches, meaning: you can enroll, but not verify. I'm going to continue reverse engineering and posting updates here.

Popax21 commented 3 years ago

I figured out a way to extract the post processing code from the Windows driver and integrate it into the Python driver. However, libfprint is still unable to produce a match, even with the post processed images. I suspect that I have to implement on device matching, however that will take a while. Still, you should be able to test the libfprint integration + post processing code and check if it might work for you. If you do, please note to check the updated instructions of the python driver.

Etaash-mathamsetty commented 3 years ago

I was able to enroll my right index finger, but It is unable to match the fingerprint. That bounty is going to be yours very soon :D

patbakdev commented 3 years ago

I wasn't able to make this work. Took some doing to get everything needed to build libfprint, etc., but then I ran into this issue. https://github.com/3v1n0/libfprint/issues/29.

After downgrading fprintd to 1.90.1 and running fprintd-enroll I got:

$ list_devices failed: Failed to activate service 'net.reactivated.Fprint': timed out (service_start_timeout=25000ms)
# list_devices failed: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.

systemd[1]: Starting Fingerprint Authentication Daemon...
fprintd[20880]: Traceback (most recent call last):
fprintd[20880]:   File "wrapper.py", line 1, in <module>
fprintd[20880]: ModuleNotFoundError: No module named 'tudor'
fprintd[20880]: Couldn't load wrapper python module!
systemd[1]: fprintd.service: Main process exited, code=dumped, status=5/TRAP
systemd[1]: fprintd.service: Failed with result 'core-dump'.
systemd[1]: Failed to start Fingerprint Authentication Daemon.

Probably something I am missing wrt setting everything up. I'll have to try again later when I have more time.

Keep up the good work.

Popax21 commented 3 years ago

I wasn't able to make this work. Took some doing to get everything needed to build libfprint, etc., but then I ran into this issue. 3v1n0/libfprint#29.

After downgrading fprintd to 1.90.1 and running fprintd-enroll I got:

$ list_devices failed: Failed to activate service 'net.reactivated.Fprint': timed out (service_start_timeout=25000ms)
# list_devices failed: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.

systemd[1]: Starting Fingerprint Authentication Daemon...
fprintd[20880]: Traceback (most recent call last):
fprintd[20880]:   File "wrapper.py", line 1, in <module>
fprintd[20880]: ModuleNotFoundError: No module named 'tudor'
fprintd[20880]: Couldn't load wrapper python module!
systemd[1]: fprintd.service: Main process exited, code=dumped, status=5/TRAP
systemd[1]: fprintd.service: Failed with result 'core-dump'.
systemd[1]: Failed to start Fingerprint Authentication Daemon.

Probably something I am missing wrt setting everything up. I'll have to try again later when I have more time.

Keep up the good work.

Did you install the python driver module globaly? (see README.md in the pydrv directory)

Etaash-mathamsetty commented 2 years ago

Any updates for the on device processing? I think there might be some dumb mistake in the code lol

Popax21 commented 2 years ago

Any updates for the on device processing? I think it might be some dumb mistake in the code lol

As I have to completely reverse engineer and replicate that part of the driver, it will take a while. It's the biggest part of the windows driver.

Etaash-mathamsetty commented 2 years ago

could you give another update?

Popax21 commented 2 years ago

could you give another update?

I'm still making progress, but it's quite slow. Hopefully though, the next update will be an announcement of the fully functioning driver. However, it'll take a while.

Etaash-mathamsetty commented 2 years ago

another progress update plz?

Popax21 commented 2 years ago

another progress update plz?

I currently don't have much time or motivation to work on this project, however, when I regain both, I'll continue working on it.

Etaash-mathamsetty commented 2 years ago

another progress update plz?

I currently don't have much time or motivation to work on this project, however, when I regain both, I'll continue working on it.

That's alright, but Can you upload what you have got? I would like to continue working on it

Popax21 commented 2 years ago

another progress update plz?

I currently don't have much time or motivation to work on this project, however, when I regain both, I'll continue working on it.

That's alright, but Can you upload what you have got? I would like to continue working on it

I didn't get much past the current state of the repo, so everything should be in there. However, most of the reverse engineering work is quite messy, so it may take a while until you get used to it. rev.txt and the Ghydra export are the most important files, as they contain all the information already gathered, and the prototype driver contains the practical implementation of it, which might be easier to understand.

Etaash-mathamsetty commented 2 years ago

another progress update plz?

I currently don't have much time or motivation to work on this project, however, when I regain both, I'll continue working on it.

That's alright, but Can you upload what you have got? I would like to continue working on it

I didn't get much past the current state of the repo, so everything should be in there. However, most of the reverse engineering work is quite messy, so it may take a while until you get used to it. rev.txt and the Ghydra export are the most important files, as they contain all the information already gathered, and the prototype driver contains the practical implementation of it, which might be easier to understand.

good to know

Etaash-mathamsetty commented 2 years ago

another progress update plz?

I currently don't have much time or motivation to work on this project, however, when I regain both, I'll continue working on it.

That's alright, but Can you upload what you have got? I would like to continue working on it

I didn't get much past the current state of the repo, so everything should be in there. However, most of the reverse engineering work is quite messy, so it may take a while until you get used to it. rev.txt and the Ghydra export are the most important files, as they contain all the information already gathered, and the prototype driver contains the practical implementation of it, which might be easier to understand.

I tried compiling your fork of ghidra and... it didn't work any help? im using arch linux now error: Could not find method helpIndexCompile() for arguments [javax.help:javahelp:2.0.05] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. also an sha256 hash didn't match

Popax21 commented 2 years ago

another progress update plz?

I currently don't have much time or motivation to work on this project, however, when I regain both, I'll continue working on it.

That's alright, but Can you upload what you have got? I would like to continue working on it

I didn't get much past the current state of the repo, so everything should be in there. However, most of the reverse engineering work is quite messy, so it may take a while until you get used to it. rev.txt and the Ghydra export are the most important files, as they contain all the information already gathered, and the prototype driver contains the practical implementation of it, which might be easier to understand.

I tried compiling your fork of ghidra and... it didn't work any help? im using arch linux now error: Could not find method helpIndexCompile() for arguments [javax.help:javahelp:2.0.05] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

Did you follow the regular Ghdira build guide?

Etaash-mathamsetty commented 2 years ago

yes i did

Popax21 commented 2 years ago

yes i did

I did some research, and it might be related to not building with JDK 11